Шестнадцатеричное и десятичное преобразование - PullRequest
1 голос
/ 13 декабря 2010

У меня есть двоичный файл, определение его содержимого выглядит следующим образом: (все данные хранятся в младшем порядке (т. Е. Сначала младший байт)).Ниже приведены номера примеров: HEX

11 63 39 46             --- Time, UTC in seconds since 1 Jan 1970.
01 00                   --- 0001 = No Fix, 0002 = SPS
97 85 ff e0 7b db 4c 40 --- Latitude, as double
a1 d5 ce 56 8d 26 28 40 --- Longitude, as double
f0 37 e1 42             --- Height in meters, as float
fe 2b f0 3a             --- Speed in km/h, as float
00 00 00 00             --- Heading (degrees ?), as float
01 00                   --- RCR, log reason. 0001=Time, 0004=Distance
59 20 6a f3 4a 26 e3 3f --- Distance in meters, as double,
2a                      --- ? Don't know
a8                      --- Checksum, xor of all bytes above not including 0x2a

. Данные из двоичного файла "в HEX" выглядят так, как показано нижепо инструкции до.

Ответы [ 2 ]

1 голос
/ 13 декабря 2010

Вероятно, неправильно, но вот пример с использованием Ruby:

hex   = "F25D39460200269652F5032445401F4228D79BCC54C09A3A2743B4ADE73F2A83"
ints  = hex.scan(/../).map{ |s| s.to_i(16) }
raw   = ints.pack('C*')
fields = raw.unpack( 'VvEEVVVvE')

p fields
#=> [1178164722, 2, 42.2813707974677, -83.1970117467067, 1126644378, 1072147892, nil, 33578, nil]

p Time.at( fields.first )
#=> 2007-05-02 21:58:42 -0600

Я был бы признателен, если бы кто-то хорошо разбирающийся в #pack и #unpack показал бы мне лучший способ выполнить первые три строки.

0 голосов
/ 13 декабря 2010

My Cygnus Hex Editor может загрузить такой файл и, используя шаблоны структуры, отобразить данные в своих собственных форматах.

Кроме того, это просто вопрос проработки каждого значения и выработки перевода для каждого байта.

...