这是一个奇怪的,但坚持我在这里。给定一个十六进制值(从 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 方法来实现这一点。
谢谢!
请注意,正如我在上面的评论中提到的,您不需要将值转换为字符串;如果将其保留为十进制整数,则可以使用位移和余数运算符来获取二进制值。
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)
| 归档时间: |
|
| 查看次数: |
1697 次 |
| 最近记录: |