2015-08-17 2 views
0

Я читаю файл pcap из Wireshark и сохраняю данные в 8 бит, используя u_char. Одна часть данных находится в 64 бит, поэтому у меня есть восемь 8-битных чисел, которые мне нужно объединить в/читать как одно 64-битное число, а затем преобразовать в десятичные числа. Например, это то, что я в настоящее время64bit hex to decimal в C

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 

Помощь очень ценится. Благодарю.

+2

Период времени предполагает, что он не является целым числом ... –

ответ

2

Похоже, что OP хочет наложить 8-байтовое целое число с binary64double.

Такой код переносится на многие машины, но, конечно же, не является переносным для всех машин 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 
+0

Да. http://www.binaryconvert.com/result_double.html?hexadecimal=3FE2DA2F8BDEC5F4 –

+0

@Eugene Sh.Nice ссылка на сайт и значение "0.589134". – chux

+0

Да, это то, что я ищу. Моя основная проблема заключается в том, чтобы взять 8 1 байт-номеров и объединить их в 1 8-байтный номер. – mchoy25