endianness - How do I swap endian-ness (byte order) of a variable in javascript -
i receiving , sending decimal representation of 2 little endian numbers. to:
- shift 1 variable 8 bits left
- or them
- shift variable number of bits
- create 2 8 bit numbers representing first , second half of 16 bit number.
javascript (according https://developer.mozilla.org/en/javascript/reference/operators/bitwise_operators) uses big endian representation when shifting...
endianness bit foreign me (i 90 percent sure outlined steps want.) swapping bit dizzying. please help! need know how swap order in efficient manner. (i can think of using loop on tostring() return value)
function swap16(val) { return ((val & 0xff) << 8) | ((val >> 8) & 0xff); } explanation:
- let's
valis, example,0xaabb. - mask
vallsb&ing0xff: result0xbb. - shift result 8 bits left: result
0xbb00. - shift
val8 bits right: result0xaa(the lsb has "dropped off" right-hand side). - mask result lsb
&ing0xff: result0xaa. - combine results steps 3 , step 5
|ing them together:
0xbb00 | 0xaa0xbbaa.
function swap32(val) { return ((val & 0xff) << 24) | ((val & 0xff00) << 8) | ((val >> 8) & 0xff00) | ((val >> 24) & 0xff); } explanation:
- let's
valis, example,0xaabbccdd. - mask
vallsb&ing0xff: result0xdd. - shift result 24 bits left: result
0xdd000000. - mask
valsecond byte&ing0xff00: result0xcc00. - shift result 8 bits left: result
0xcc0000. - shift
val8 bits right: result0xaabbcc(the lsb has "dropped off" right-hand side). - mask result second byte
&ing0xff00: result0xbb00. - shift
val24 bits right: result0xaa(everything except msb has "dropped off" right-hand side). - mask result lsb
&ing0xff: result0xaa. - combine results steps 3, 5, 7 , 9
|ing them together:
0xdd000000 | 0xcc0000 | 0xbb00 | 0xaa0xddccbbaa.
Comments
Post a Comment