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

How to convert unsigned long long int into unsigned char*?

比如说我有这个 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";

类似我问的这个问题: 唯一的例外是反向。

带移位的内联转换(字节序无关)

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,但是没有。