0

我有一个 char 数组,它的值是 0x4010,我希望这个值变成一个无符号的短变量。我通过使用 atoi 来做到这一点,但将短值设为 0

unsigned short cvtValue = (unsigned short) atoi(aclDta);

0x10 的字符是 DEL,我希望是因为这个。十进制是 6416

4

3 回答 3

4

您不需要使用转换数据atoi,只需将其转换:

unsigned short cvtValue = *(unsigned short *)aclDta;
于 2013-07-02T16:37:38.463 回答
2

你问的没有意义。ascii 中的 0x4010 是“@”,后跟“数据链接转义”。

atoi、strtol 等都是关于解析包含数字的 ascii 字符串 -@\DLE不是数字。

您真正想要的是将 0x4010 字节视为单个短字节。

这是一个便宜的方法:

cvtValue |= ((short)aclData[0]) << 8;
cvtValue |= ((short)aclData[1]);
于 2013-07-02T16:37:22.147 回答
1

我会发表评论,但显然作为新用户我不能?无论如何,如果您可能将应用程序移植到具有不同字节序的平台上,antiduh 的答案会更正确。

char *str = "01";
unsigned short val = *(unsigned short *)str;

在小端系统上 val == 0x3130。在大端系统上 val == 0x3031。

于 2013-07-02T20:58:12.047 回答