将十六进制值转换为布尔值列表

Kie*_*n E 2 javascript

这是一个奇怪的,但坚持我在这里。给定一个十六进制值(从 00-FF),我需要将其转换为二进制,然后从那里将其转换为一个对象,其中键是每个位的“位置”,值是布尔值。

那是一个尴尬的解释。下面是一个例子:

鉴于'FF',我需要将其转换为二进制(parseInt(<hex value>, 16).toString(2)适用于该工作)。

现在 FF 已经变成了1111 1111,我需要将它转换成一个看起来像这样的对象:

{ 
  "1": true, 
  "2": true, 
  "4": true, 
  "8": true, 
  "16":true, 
  "32":true,
  "64": true, 
  "128": true
}
Run Code Online (Sandbox Code Playgroud)

再举一个例子,给定十六进制值“A6”,1010 0110它会变成:

{ 
  "1": false, 
  "2": true, 
  "4": true, 
  "8": false, 
  "16":false, 
  "32":true, 
  "64": false, 
  "128": true
}
Run Code Online (Sandbox Code Playgroud)

我唯一想做的是从二进制-> 对象的最终转换。

我知道我可以用一个简单的循环来做到这一点,但我想知道是否有任何很酷的 comp-sci 方法来实现这一点。

谢谢!

Ham*_*mms 5

请注意,正如我在上面的评论中提到的,您不需要将值转换为字符串;如果将其保留为十进制整数,则可以使用位移和余数运算符来获取二进制值。

var x = parseInt('A6', 16); // 166
var result = {};

for (var n = 1; x > 0; x = x >> 1, n = n * 2) {
   result[n] = x % 2 == 1;
}

console.log(JSON.stringify(result, undefined, 2));
Run Code Online (Sandbox Code Playgroud)