微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何将 unsigned long long int 转换为 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";

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

解决方法

具有位移位的内联转换(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,但没有。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。