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.

**From reading this, we know: **

- 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, 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
```

Add one to the result:

```
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!