c++ - 连接两个十六进制数

标签 c++ algorithm

如果我从文件中读取了一些十六进制数 (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 )))

关于c++ - 连接两个十六进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26840546/

相关文章:

c++ - 将可执行文件重命名为 game.exe 会导致运行时延迟 15 秒——奇怪的问题

c - 二项式定理 - C 语言算法

指向未确定类的成员函数的指针的 C++ 模板,具有不同的参数,称为参数

c++ - 提升 mpl::vector 和 hana

java - 系列中最大的产品(java)

c++ - 获取唯一编号并知道它们何时被释放

c++ - 计算 pow(a,b) mod n

javascript - 按屏幕参数排序的文件

c++ - 没有有用信息的 GLSL 链接失败

c++ - 如何解决 bad alloc() 运行时错误?