C中的64位十六进制到十进制

64bit hex to decimal in C

我正在从 Wireshark 读取 pcap 文件并使用 u_char 以 8 位存储数据。数据的一部分是 64 位的,所以我有八个 8 位数字,我需要将它们组合成/读取为一个 64 位数字,然后将其转换为十进制。 例如,这是我目前拥有的

Hex: 3f e2  da  2f 8b  de  c5  f4
Dec: 63 226 218 47 139 222 197 244

这就是我目前想要的,

Hex: 3fe2da2f8bdec5f4
Dec: .589134

为了合并8个1bytes,我试过:

long long int a;
a = (data[j] << 56) | (data[j+1] << 48) | (data[j+2] << 40) | (data[j+3] << 32) | (data[j+4] << 24) | (data[j+5] << 16) | (data[j+6] << 8) | data[j+7];
printf("%lld", a);

output: -1073815553

非常感谢您的帮助。谢谢

看起来 OP 想要用 binary64 double 覆盖一个 8 字节整数。

这样的代码可以移植到许多机器上,但肯定不能移植到所有 C 机器上,因为它假定了很多东西,比如 double.

的形式
int main(void) {
  union {
    double d;
    unsigned long long ull;
  } u;
  u.d = 0.589134;
  printf("%016llX\n", u.ull);
  u.ull = 0x3fe2da2f8bdec5f4;
  printf("%lf\n", u.d);
  return 0;
}

3FE2DA2F8BDEC5F4
0.589134