我可能会问一个重复的问题,但似乎无法找到它。
如何将无符号字符中的1e
的十六进制说法转换为int中的0x1e
(未签名)?
并连接它们我需要
hex3 = (hex1 << 8) | hex2;
如果我想一遍又一遍地做,我可以这样做吗?
hex3 = (hex3 << 8) | hex2;
编辑: 所以..我可以这样做吗?
int hex;
while (!feof(in))
{
unsigned char input = fgetc(in);
hex = hex + input;
};`
如果input
为1e
hex
为0x1e
,我后来想连接,以便下一个input
为ff
我希望输出为0x1eff
答案 0 :(得分:0)
一些注释
fgetc
的返回值,以确定何时到达文件结尾。见while-feof-file-is-always-wrong。fgetc
会返回int
而不是char
。原因是您可以检测何时返回EOF
。int
已满之前,您只能将字节移至int
。在32位系统上,int
只有4个字节,所以你只能这样做4次。int
类型。 printf
函数可用于以十六进制或十进制显示int
。要以小数显示使用printf("%d",n)
的数字,要以十六进制显示数字,请使用printf("%x",n)
。考虑到这一点,我在这里编写代码。 (我假设int
是4个字节,文件中有4个或更少的字节。)
int number = 0;
int c;
while ( (c = fgetc(in)) != EOF )
number = (number << 8) | (c & 0xff);
printf( "%x\n", number );