我有一个char数组,真的用作字节数组,而不是用于存储文本.在数组中,有两个特定的字节表示我需要存储为无符号int值的数值.下面的代码说明了设置.
char* bytes = bytes[2]; bytes[0] = 0x0C; // For the sake of this example,I'm bytes[1] = 0x88; // assigning random values to the char array. unsigned int val = ???; // This needs to be the actual numeric // value of the two bytes in the char array. // In other words,the value should equal 0x0C88;
我不知道如何做到这一点.我会假设它会涉及一些铸造和重铸的指针,但我不能让这个工作.如何实现我的最终目标?
UPDATE
谢谢Martin B,快速回复,但这不行.具体来说,在我的情况下,两个字节是0x00和0xBC.显然我想要的是0x000000BC.但是,我在unsigned int中的内容是0xffffffbc.
解决方法
unsigned int val = (unsigned char)bytes[0] << CHAR_BIT | (unsigned char)bytes[1];
如果sizeof(unsigned int)> = 2 * sizeof(unsigned char)(不是C标准保证的东西)
现在…这里的有趣的事情肯定是运算符的顺序(在许多年中,我只能记住,–,*和/ …羞耻我:-),所以我总是把尽可能多的括号我可以). []是王.二是(演员).第三个是<第四是| (如果您使用而不是|,请记住,这比“<”更重要,因此您需要制作) 我们不需要上传(无符号整数)两个(unsigned char),因为有一个integral promotion将为我们做一个,而另一个应该是一个自动的Arithmetic Conversion.
我会补充说,如果你想减少头痛:
unsigned int val = (unsigned char)bytes[0] << CHAR_BIT; val |= (unsigned char)bytes[1];