【发布时间】:2019-03-23 04:35:58
【问题描述】:
我正在尝试将 2 字节数组转换为无符号短。
这是转换的代码:
short bytesToShort(char* bytesArr)
{
short result =(short)((bytesArr[1] << 8)|bytesArr[0]);
return result;
}
我有一个存储字节的 InputFile,我通过循环读取它的字节(每次 2 个字节)并以这种方式将其存储在 char N[] arr 中:
char N[3];
N[2]='\0';
while(fread(N,1,2,inputFile)==2)
当 (hex) 值 N[0]=0 时计算正确,否则计算错误,例如:
0x62 (N[0]=0x0,N[1]=0x62) 将返回 98(短值),但是 0x166 十六进制(N[0]=0x6,N[1 ]=0x16) 将返回 5638(简而言之)。
【问题讨论】:
-
我强烈建议在这类游戏中使用无符号类型。
-
这两件事可能会咬你是字节序和@EugeneSh 的符号扩展。暗示。
-
请在您的问题/cmets 中使用特定于基础的前缀。不清楚您提到的
66是十六进制还是十进制。 -
我会说它可以正常工作,因为 N[0]=0x06, N[1]=0x16 你得到 0x1606,你为什么期望它是 0x166? 0x166 表示 N[0]=0x66, N[1]=0x01
-
0x166是358。但是0x1606是5638。检查你的数学
标签: c