long int to char:C

时间:2016-07-18 14:34:07

标签: c char long-integer

我有以下字符序列:

    char* input = "3243f6a8885a308d313198a2e0370734";

然后我尝试从input中提取前两个字符并将其存储为数字,如下所示:

char state_col[9];
char state_col_t[3];

memcpy(state_col, input, 8);
state_col[8] = 0;
state_col_t[0] = state_col[0]; state_col_t[1] = state_col[1]; state_col_t[2] = 0;
long int value = strtol(state_col_t, &endptr, 16);
char c_value = value;

当我尝试打印结果时:

printf("%x %x", c_value, value);

我得到了这个(例如):

  

32 32

     

43 43

     

fffffff6 f6

     

ffffffa8 a8

似乎与价值观有关> 0x80的。想法?

1 个答案:

答案 0 :(得分:6)

char是否已签名是实现定义的,如何将过大的整数转换为有符号整数也是实现定义的。

您应unsigned char使用uint8_tc_value

请注意,您必须将inttypes.h(或stdint.h)加入uint8_t

顺便说一句,您通过将具有错误类型的数据传递给printf()来调用未定义的行为。正确的格式说明符用于打印十六进制类型为long int的数据%lx

%x使用charunsigned charuint8_t应该可以归功于整数提升。