如何将 unsigned long long int 转换为 unsigned char*?

时间:2021-03-13 03:11:08

标签: c type-conversion 64-bit unsigned-char unsigned-long-long-int

比如说我有这个unsigned long long int

unsigned long long int test_int = 0xcfffedefcfffeded; // 14987959699154922989

如何将 test_int 转换为以下 unsigned char* 数组:

unsigned char test_char[] = "\xcf\xff\xed\xef\xcf\xff\xed\xed";

类似于我问的这个问题: How to convert unsigned char* to unsigned long long int? 唯一的例外是反向。

1 个答案:

答案 0 :(得分:2)

具有位移位的内联转换(endian-indpendent)

char test_char[8];
test_char[0] = (char)(unsigned char)(test_int >> 56);
test_char[1] = (char)(unsigned char)(test_int >> 48);
test_char[2] = (char)(unsigned char)(test_int >> 40);
test_char[3] = (char)(unsigned char)(test_int >> 32);
test_char[4] = (char)(unsigned char)(test_int >> 24);
test_char[5] = (char)(unsigned char)(test_int >> 16);
test_char[6] = (char)(unsigned char)(test_int >> 8);
test_char[7] = (char)(unsigned char)(test_int);

奖励:我们不需要谈论对齐或字节序。这只是有效。

正如评论中指出的,问题中的 test_char 有一个尾随空终止符,我们也可以通过设置 char test_char[9];test_char[8] = 0; 来实现;然而,当这个问题在实践中出现时,真实的例子很少有终止空值,也没有意义,因为中间有空值。

评论:我希望有一个标准的 htonq,但没有。

相关问题