如何从Hex获取位数

时间:2017-12-06 20:18:11

标签: javascript

例如,我如何从0x01获得8,或从0x0001获得16。

我想知道变量的位数。

var someNumber = 0x123456;
var len = whatToDoHere(someNumber);
console.log(len); // => 24 for example

3 个答案:

答案 0 :(得分:1)

以下是一些替代方案:

f1 = n => (Math.log2(n) & -8) + 8                          // log2 (-Infinity & -8 = 0)

f2 = n => ((n >>= 8) && f2(n)) + 8                         // recursion

f3 = n => n.toString(16).length + 1 << 2 & -8              // string length

for (n of [0, 0xff, 0x100, 0xffff, 0x10000, 0xffffff])
  console.log( f1(n) + '\t' + f2(n) + '\t' + f3(n) + '\t0x' + n.toString(16) )

答案 1 :(得分:0)

数字只是一个数字,它没有附加任何特定的表示。即使你说它将被格式化为base16(作为十六进制)或base256(字节),也没有说明前导零的数量(如0x01 vs 0x0001) 。但是,如果您知道,那么您已经知道格式化数字的位数。

答案 2 :(得分:0)

另一种可能的解决方案是转换为十六进制字符串,然后测量字符串的长度:

const someNumber = 0x123456;
const hexString = someNumber.toString( 16 );
const numberOfBits = hexString.length * 4;   //each character is half a byte
console.log( "Number of bits: ", numberOfBits );