二进制从hexigned char转换为int

时间:2015-11-14 22:44:48

标签: c binary

我可能会问一个重复的问题,但似乎无法找到它。

如何将无符号字符中的1e的十六进制说法转换为int中的0x1e未签名)?

并连接它们我需要

hex3 = (hex1 << 8) | hex2;

如果我想一遍又一遍地做,我可以这样做吗?

hex3 = (hex3 << 8) | hex2;

抱歉,这些可能是真正的问题,但我似乎无法理解二元操作:(

编辑: 所以..我可以这样做吗?

int hex;
while (!feof(in))
{ 
   unsigned char input = fgetc(in);
  hex = hex + input;
};`

如果input1e hex0x1e,我后来想连接,以便下一个inputff我希望输出为0x1eff

1 个答案:

答案 0 :(得分:0)

一些注释

  1. 您需要检查fgetc的返回值,以确定何时到达文件结尾。见while-feof-file-is-always-wrong
  2. fgetc会返回int而不是char。原因是您可以检测何时返回EOF
  3. int已满之前,您只能将字节移至int。在32位系统上,int只有4个字节,所以你只能这样做4次。
  4. C没有十六进制数和十进制数,它只有一个存储数字的int类型。 printf函数可用于以十六进制或十进制显示int。要以小数显示使用printf("%d",n)的数字,要以十六进制显示数字,请使用printf("%x",n)
  5. 考虑到这一点,我在这里编写代码。 (我假设int是4个字节,文件中有4个或更少的字节。)

    int number = 0;
    int c;
    while ( (c = fgetc(in)) != EOF )
        number = (number << 8) | (c & 0xff);
    
    printf( "%x\n", number );