我通过网络数据包接收短int,这意味着它将以网络字节顺序(大端)的2字节形式出现。在C中将2个字节组合成一个短int int
我想将我收到的两个字节组合到我的机器上的短整型变量中,这是一种小端字节顺序。
例子:
short int test = 400; //0x190 in big endian, 0x9001 in little endian
char testResponse[2] = {0x01, 0x90};
//here is my attempt
short int result = testResponse[1] << 8 | testResponse[0];
printf("%d\n", result); //-28671 when expecting 400
任何帮助,将不胜感激!
你有什么问题? – Olaf
结合这两个数字的方式似乎是一个8位左移比OR,但这似乎并没有给出正确的结果,所以我想知道是否有人知道我的位算术是错误的。 –
C中没有“8位左移”。如果有,则移位计数为'8'会引起未定义的行为。你很可能受到整数的促销活动,了解它们!并使用固定宽度的无符号类型。 'char'不保证是无符号的,也不保证有8位。根据您在现在删除的答案中的评论:我们需要所有相关信息。或者你说我的代码是正确的。 – Olaf