我有一个char数组,它保持值0x4010,我希望这个值成为无符号短变量。 我这样做是通过使用atoi但得到短值为0
unsigned short cvtValue = (unsigned short) atoi(aclDta);
0x10的字符是DEL,我希望是因为这个。 十进制是6416
答案 0 :(得分:4)
您不需要使用atoi
转换数据,只需投放它:
unsigned short cvtValue = *(unsigned short *)aclDta;
答案 1 :(得分:2)
你问的是没有意义的。 ascii中的0x4010是'@',后跟'数据链接转义'。
atoi,strtol等都是关于解析包含数字的ascii字符串 - @\DLE
不是数字。
您真正想要的是将0x4010字节视为单个短路。
这是一种便宜的方式:
cvtValue |= ((short)aclData[0]) << 8;
cvtValue |= ((short)aclData[1]);
答案 2 :(得分:1)
我发表评论,但显然作为新用户,我不能?无论如何,如果您将应用程序移植到具有不同内联性的平台上,antiduh的答案会更正确。
char *str = "01";
unsigned short val = *(unsigned short *)str;
在小端系统上val == 0x3130。在big endien systems val == 0x3031。