连接两个十六进制数字
Concatenating two hexadecimal numbers
如果我有一个十六进制数(20),我正在从一个文件中读取,比如说,
0a 0b bc 05 50
我正在用把它们读成两个字符
fscanf(p,"%c",&a);
fscanf(p,"%c",&b);
其中p是文件指针,a和b是无符号字符。现在,我想把它们连接起来,形成一个单独的数字。像这样,我想连接两个十六进制数字中的每一个,并最终计算10对的总和,因为总共有20个数字。我如何使用C++来完成它?
我试过用这个
unsigned int result = (a<<24) | (b<<16)
我该怎么做?谢谢
首先:如果您的文件是"原始"二进制文件,则不应该使用fscanf
来读取它。请使用fread
:
fread( &a, sizeof( a ), 1, p );
fread( &b, sizeof( b ), 1, p );
第二:我不知道你的目标,但我认为,你应该像这样"打包"读取的字节:
unsigned int result = ( unsigned int(a) << 8 ) | b;
或者,您可以一次将16位读取到unsigned short
变量中,然后在需要时交换其字节:
unsigned short a;
fread( &a, sizeof( a ), 1, p );
unsigned int result = ( (a & 0xF) << 8 ) | ( a >> 8 ); // if you need swap
unsigned int result = a; // it you don't )))
由于这只是原始二进制数据,因此您不需要使用格式化的I/O或读取单个字符-您只需将成对的字节读取为16位整数并对其求和,例如
uint32_t sum = 0;
for (int i = 0; i < 10; ++i)
{
uint16_t v;
fread(&v, sizeof(v), 1, p):
//NB: swap high/low bytes of `v` here if endianness is incorrect
sum += v;
}
如果您的文件是包含十六进制数的文本文件,如您在示例中所示,则可以使用"%x"
作为格式字符串来读取整个十六进制数。
int n;
while(!feof(p)){
fscanf(p,"%x",&n);
//no conversion needed...
}
相关文章:
- 在 c++ 中从文本文件中读取两个十六进制值
- 从char阵列中提取十六进制数字
- 如何将多个十六进制值连接到一个值
- 如何在 c++ 中将十六进制数字转换为字符
- 使用字符串格式限制十六进制数字的数量
- 从输入中找到连续十六进制数字的最大数量
- 将十六进制数字从无符号字符转换为字符串
- 从 bin 文件 -c++ 中读取十六进制数字为每个字符 2 位数字
- C 将向量转换为2个十六进制,然后将其存储在字符串中
- 上两个六角形将视觉转换和分开2个字节六角形,上两个角色,下两个十六进制在C 中转到第二个Charater
- 在 C++ 中存储为字符串的两个十六进制值上的 XOR
- 一次打印 2 个字节的十六进制数字
- 连接两个十六进制数字
- 在一行代码中输入2个十六进制数字和一个字符串
- 为什么这个程序的结果是三个十进制数"597, 295, 295,"输入两个十六进制数"255 127<enter>"
- 将文件中的两个十六进制字符组合并转换为十进制
- 同时向QByteArray添加多个十六进制数字
- c++中两个十六进制数字的相加
- 将字节转换为两位十六进制数字
- c++编译器什么时候开始考虑在字符串转义中使用两个以上的十六进制数字?