如何将 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
,但是没有。
比如说我有这个 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
,但是没有。