user1972227
user1972227

Reputation:

Convert unknown Hex digits to a Longitude and Latitude

F3 c8 42 14 - latitude //05.13637° should be nearby this coordinate
5d a4 40 b2  - longitude //100.47629° should be nearby this coordinate

this is the hex data i get from GPS device, how to convert to readable coordinate? i don't have any manual document.please help.thanks

    22 00 08 00 c3 80 00 20 00 dc f3 c8 42 14 5d a4 40 b2 74 5d 34 4e 52 30 39
47 30 35 31 36 34 00 00 00

this is my full bytes i received,but the engineer told me that F3 c8 42 14 is latitude and 5d a4 40 b2 is longitude

Upvotes: 4

Views: 6013

Answers (3)

Jim Merkel
Jim Merkel

Reputation: 352

I think the values are in 32-bit floating point. However, the bytes are slightly shifted in the stream that you show. Taking longitude first: 100.47629 in 32-bit floating point is 42C8F3DC these are bytes 10 through 13 in your stream (Least significant byte first). For latitude 5.13637 in 32-bit floating point is 40A45D24 these are bytes 14 through 17 but it's 40A45D14 in the byte stream so it's off a little in the least significant decimal digit (Again, it's least significant byte first).

Upvotes: 1

Assad Ebrahim
Assad Ebrahim

Reputation: 6361

Assuming the hex codes represent unencrypted 32-bit floating point numbers (they might not do), you could try reading them into a C program and printing them out using printf("%f").

Don't forget that the words could have both endianness, i.e. the first one could be F3 C8 42 14 or 14 42 C8 F3 (bytes reversed).

Try it both ways and see if you get anything useful.

I wasn't able to get anything quickly from this online floating point calculator here.


Edit:

Building on Khanal's answer, this link to Latitude/Longitude suggests that the numbers are indeed fixed point and explains the sign convention.

Perhaps more useful for the calculations is HexIt, which allows choosing from a variety of C data types, both integer and floating point, as well as flipping back and forth between little and big endian representations.

Upvotes: 2

Khanal
Khanal

Reputation: 788

I worked with a Motorola GPS module once and the documentation said that the two hexes represented int types.

In your case, you might want to look at the documentation as well. If you know the model number, you can just google it. Here is the documentation link for the motorola GPS I used.

Motorola GPS Module

I also took the liberty to do some calculations for you. If your lattitude was indeed

0x1442c8f3 

(endianness does make a difference here). The integer equivalent is

339921139 

in decimal system. If you divide that by 3600000 milliarcseconds (where 1 deg = 60 min = 60 * 60 s = 60*60*1000 ms) you get

94.4225386

deg, which is close to your expectations. There isn't enough data to validate it but I believe most of the GPS modules return the milliarcseconds for both latitude and longitude.)

Upvotes: 4

Related Questions