Ehsan Zargar Ershadi
Ehsan Zargar Ershadi

Reputation: 24833

How to convert one byte (8 bit) to signed integer in JavaScript?

I need to convert one byte into java script signed integer. I have checked this link which converts 2 bytes , but how could I downgrade and convert only one byte?

for example 0x0A would be 10, how about 0xD4?

Upvotes: 5

Views: 4974

Answers (3)

AndyT
AndyT

Reputation: 1453

Javascript handles bitwise operators as signed 32 bit integers.

Knowing this, if you want to sign extend a byte, you need to propagate the top bit of the byte (which indicates the sign) to all of the higher bits in the thirty two bit integer. This can be achieved with:

value << 24 >> 24

What this does is shift the byte to the top of the 32 bit integer, then shift it back down preserving the sign bit.

Similarly, you can sign extend a 16 bit value with:

value << 16 >> 16

Upvotes: 13

Super S06
Super S06

Reputation: 51

This solution converts using 2's complement for negative numbers, which is the standard way negative numbers are encoded.

function uncomplement(val, bitwidth) {
    var isnegative = val & (1 << (bitwidth - 1));
    var boundary = (1 << bitwidth);
    var minval = -boundary;
    var mask = boundary - 1;
    return isnegative ? minval + (val & mask) : val;
}

uncomplement(0xFF, 8) returns -1
uncomplement(0x80, 8) returns -128
uncomplement(0x7F, 8) returns 127

Upvotes: 5

Ehsan Zargar Ershadi
Ehsan Zargar Ershadi

Reputation: 24833

I came up with this solution:

function convertToSignedInt(signedByte) {
    var sign = signedByte & (1 << 7);
    return (signedByte & 0x7f) * (sign !== 0 ? -1 : 1);
}

Hope it could save others some time. convertToSignedInt(0x81) // returns -1

Upvotes: -3

Related Questions