Vimzy
Vimzy

Reputation: 1965

Convert 2 bytes into 12 bit number?

I'm working in C, and assume I have 2 bytes in little endian:

buffer[0] = 0x01; buffer[1] = 0x02; 

How can I convert the above into a combined 12 bit number? So after combining it should look like:

0x0201

Upvotes: 0

Views: 5236

Answers (3)

WalterM
WalterM

Reputation: 2706

This is a 16 bit number. each byte is 8 bits.

int i = (buffer[0] & 0xFF) | (buffer[1] << 8);

If you want 12 bits then this

int i = (buffer[0] & 0xFF) | ((buffer[1] & 0x0F) << 8);

Convert back to buffer

char buffer[2];
buffer[0] = i & 0xFF;
buffer[1] = (i >> 8) & 0x0F;

Upvotes: 5

R Sahu
R Sahu

Reputation: 206567

3 bytes (24 bits) number:

number = ((buffer[2] & 0x0F) << 16) | ((buffer[1] & 0x0F) << 8) | buffer[0];

2 bytes (16 bits) number:

number = ((buffer[2] & 0x0F) << 8) | ((buffer[1] & 0x0F) << 4) | buffer[0];

Upvotes: 2

chux
chux

Reputation: 153338

In case buffer[] is a signed type use

int twelve_bit1 = ((buffer[1] & 0xF) << 8) | (buffer[0] & 0xFF);

or

int twelve_bit2 = ((buffer[1] & 0xF) << 8) | (unsigned char) buffer[0];

or

int twelve_bit3 = ((buffer[1] & 15) * 256) | buffer[0] & 255;

All generate similar code.

Upvotes: 1

Related Questions