如何将64位整数转换为char数组并返回?

如何将64位整数转换为char数组并返回?,第1张

如何将64位整数转换为char数组并返回?

这很简单,问题在于您正在移位char数组中的位,但是大小

a[i]
为4个字节(向上转换为
int
),因此您的移位超出了范围。尝试将其替换为您的代码:

int64_t charTo64bitNum(char a[]) {  int64_t n = 0;  n = (((int64_t)a[0] << 56) & 0xFF00000000000000U)    | (((int64_t)a[1] << 48) & 0x00FF000000000000U)    | (((int64_t)a[2] << 40) & 0x0000FF0000000000U)    | (((int64_t)a[3] << 32) & 0x000000FF00000000U)    | ((a[4] << 24) & 0x00000000FF000000U)    | ((a[5] << 16) & 0x0000000000FF0000U)    | ((a[6] <<  8) & 0x000000000000FF00U)    | (a[7]        & 0x00000000000000FFU);  return n;}

这样,您将

char
在转换之前将强制转换为64位数字,并且不会超出范围。您将获得正确的结果:

entity:Dev jack$ ./a.out aNum = 123456789bNum = 51544720029426255

附带说明一下,假设您不需要窥视char数组,我认为这也可以正常工作:

#include <string.h>void int64ToChar(char a[], int64_t n) {  memcpy(a, &n, 8);}int64_t charTo64bitNum(char a[]) {  int64_t n = 0;  memcpy(&n, a, 8);  return n;}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5015374.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存