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