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
我正在从 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