Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从十六进制中获取位数_Javascript - Fatal编程技术网

Javascript 如何从十六进制中获取位数

Javascript 如何从十六进制中获取位数,javascript,Javascript,例如,如何从0x01获取8,或从0x0001获取16 我想知道变量的位数 var someNumber = 0x123456; var len = whatToDoHere(someNumber); console.log(len); // => 24 for example 数字只是一个数字,它没有任何特定的表示形式。即使您说它将被格式化为base16(十六进制)或base256(字节),这也没有说明前导零的数量(如0x01vs0x0001)。但是,如果您知道这一点,您已经知道格式化后

例如,如何从0x01获取8,或从0x0001获取16

我想知道变量的位数

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

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

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

const someNumber=0x123456;
常量hexString=someNumber.toString(16);
常量numberOfBits=hexString.length*4//每个字符是半个字节

日志(“位数:”,numberOfBits)这里有几个备选方案:

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

f3=n=>n.toString(16).length+1您需要解析一个字符串,而不是一个数字,因为0x0001将转换为1d,可以放入一个字节。除非你想知道需要多少字节才能保存这个数字。数字在JavaScript中没有不同的“字节数”。你可能会考虑<代码>数学> Log2()/代码>以获得你想要的。<代码> 64 <代码>…
0x01
中有1个字节,而不是8个字节。你对字节或位感兴趣吗?@Pointy刚刚更新了问题-你说得对!遗憾的是,这并不像预期的那样有效。(0x123456).toString().length/2/=>7,但应该是24Ah对不起,您的问题是字节(以及其他位置的位)。在这种情况下,
someNumber.toString(16).length*4应该是您想要的。不要忘记toString()中的16!我已经更新了我的帖子以匹配。就是这样!谢谢