0

我正在尝试从 char 数组中提取第二个和第三个字节并将其值解释为整数。在这种情况下,要提取 0x01 和 0x18 并使用 strtol 将其值解释为 0x118 或 280(十进制)。但是输出 act len 返回 0。

int main() {

char str[]={0x82,0x01,0x18,0x7d};
char *len_f_str = malloc(10);
int i;
memset(len_f_str,'\0',sizeof(len_f_str));

strncpy(len_f_str,str+1,2);

printf("%x\n",str[1] & 0xff);
printf("%x\n",len_f_str[1] & 0xff);
printf("act len:%ld\n",strtol(len_f_str,NULL,16));

return 0;
}

输出:

bash-3.2$ ./a.out 
1
18
act len:0

我在这里想念什么?帮助表示赞赏。

4

2 回答 2

1

strtol将字符串的 ASCII 表示转换为值,而不是实际位。

尝试这个:

short* myShort;
myShort = (short*) str[1];
long myLong = (long) myShort;
于 2014-05-22T00:08:31.913 回答
0

strtol期望输入是一系列字符,以可打印的形式表示数字。代表0x118你会使用

char *num = "118";

如果你然后传递numstrtol,并给它一个基数16,你会得到你的 280 回来。

如果您的数字表示为字节序列,则可以使用简单的数学来计算结果:

unsigned char str[]={0x82,0x01,0x18,0x7d};
unsigned int res = str[1] << 8 | str[2];
于 2014-05-22T00:09:36.457 回答