## How to convert a 4-byte hexadecimal sequence in a little-endian architecture into decimal

Here is my technique for solving the problem of converting a 4-byte hexadecimal sequence in a little-endian architecture into decimal.

This may seem rather niche but it was a surprisingly large part of Week 5 in my CS271 class. The class’s materials and extra help I found around the web seemed to go off on tangents that were interesting but unrelated to solving this kind of problem quickly, and all I really wanted was a simple step-by-step guide I could use on exams.

Therefore, I am sharing my simple 5-step technique for converting hex to decimal in a little-endian architecture here! Hope someone else finds it helpful.

Example problem:

`The four-byte sequence 0x86 0x65 0x53 0x82 stored in consecutive memory cells in a little-endian architecture represents ___________ (decimal) when interpreted as a 32-bit signed integer.`

• it’s little-endian, so we are going to reverse the order of the bits
• our result will be signed

### Step 1: Reverse the bytes

Take the bits in blocks of two and work right to left.

`0x86 0x65 0x53 0x82 becomes 0x82536586`

### Step 2: Look at the most significant bit and determine if there will be a negative result

`0x82536586   <-- that's this dude in red here`

The most significant bit here contains an 8.

We know that in hex a most-significant bit of 7 or more means we are looking at a negative number. (If this were a positive number, ie: the most significant bit is between 0 and 6 inclusive, then skip ahead to Step 4.)

### Step 3: Since we are working with a negative number, flip the bits (subtract our hex sequence from FFFFFFFF) and add 1

```  FFFFFFFF
- 82536586
7DAC9A79```

```7DAC9A79
+1
7DAC9A7A```

The result is the hex sequence we will use for the next step.

`7DAC9A7A`

### Step 4: Multiply each term by 16 raised to a power

To convert a hex value into a decimal value, we multiply each “position” in the hex sequence by 16 raised to a power. Working from right to left, we know that furthest-right position is 16^0 (so, just a 1). The second-from-right position is 16^1 (so, just a 16). The third-from-right position is 16^2, and so on.

Recall that A = 10, B = 11, C = 12, D = 13, E = 14, and F = 15 when working in hex.

`(7*16^7)+(D*16^6)+(A*16^5)+(C*16^4)+(9*16^3)+(A*16^2)+(7*16^1)+A`

The result of this long sequence is:

`2108463738`

Remember that negative sign? Now’s a good time to stick it on.

`-2108463738`

And there you have it: the result is -2108463738.

### Some final notes

• Be sure to observe whether the problem expects a signed decimal result or an unsigned decimal result. If the problem is asking for unsigned, you can skip the FFFFFFFF subtraction step entirely, even if the most significant bit is 7 or higher.
• Remember that when working with a signed hexadecimal number, you look at the most significant bit to determine if it’s negative or positive.
• 0-7 = positive
• 8-F = negative
• If you had to do the flipping step, don’t forget to put that negative sign onto your final answer!