Number made of 4 chars with hex

0

Iam programming in C++ and Iam comming with another "stupid" problem. If I have 4 chars like these:

char a = 0x90
char b = 0x01
char c = 0x00
char d = 0x00

when that all means hexadecimal number 0x00000190 which is 400 decimal number. How do I convert these chars to one int? I know i can do

int number = a;

but this will convert only one char to int. Could anybody help please?

c++
char
int
hex
asked on Stack Overflow Jan 29, 2015 by TomCrow

3 Answers

2

You may use:

int number = (a & 0xFF)
           | ((b & 0xFF) << 8) 
           | ((c & 0xFF) << 16)
           | ((d & 0xFF) << 24);

It would be simpler with unsigned values.

answered on Stack Overflow Jan 29, 2015 by Jarod42 • edited Jan 29, 2015 by Jarod42
1

like this

int number = ((d & 0xff) << 24) | ((c &0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff);

the << is the bit shift operator and the & 0xff is necessary to avoid negative values when promoting char to int in the expression (totally right by Jarod42)

answered on Stack Overflow Jan 29, 2015 by BeyelerStudios • edited Jan 29, 2015 by BeyelerStudios
0

This works:

unsigned char ua = a;
unsigned char ub = b;
unsigned char uc = c;
unsigned char ud = d;

unsigned long x = ua + ub * 0x100ul + uc * 0x10000ul + ud * 0x1000000ul

It is like place-value arithmetic in decimal but you are using base 0x100 instead of base 10.

If you are doing this a lot you could wrap it up in an inline function or a macro.


Note - the other answers posted so far using bitwise operations on (char)0x90 are all wrong for systems where plain char is signed, as they are forgetting that (char)0x90 is a negative value there, so after the integral promotions are applied, there are a whole lot of 1 bits on the left.

answered on Stack Overflow Jan 29, 2015 by M.M

User contributions licensed under CC BY-SA 3.0