簡體   English   中英

將十六進制值轉換為布爾值列表

[英]Convert hex value to list of boolean values

這是一個奇怪的問題,但是請在這里堅持。 給定一個十六進制值(從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
}

再舉一個例子,給定十六進制值“ A6”,它變為1010 0110 ,它將變為:

{ 
  "1": false, 
  "2": true, 
  "4": true, 
  "8": false, 
  "16":false, 
  "32":true, 
  "64": false, 
  "128": true
}

我唯一要做的就是從二進制->對象進行最終轉換。

我知道我可以通過一個簡單的循環來做到這一點,但是我想知道是否有任何酷的comp-sci方法來完成此任務。

謝謝!

請注意,正如我在上面的評論中提到的那樣,您無需將值轉換為字符串。 如果將其保留為十進制整數,則可以使用bitshift余數運算符來獲取二進制值。

 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)); 

您可以執行此操作而無需使用中間二進制字符串,但是如果您只是停留在最后一步,則可以執行以下操作:

var bin = parseInt('0xa6', 16).toString(2);

Array.from(bin).reduce(function(byte, bit, index) {
    byte[1 << bin.length - index - 1] = bit === '1';
    return byte;
}, {});

JavaScript演示

這是一個班輪

 const x = parseInt('A6', 16).toString(2).split('').reduceRight((last, bit, i, arr) => Object.assign(last, {[`${1 << (arr.length - i - 1)}`]: bit == 1}), {}) console.log(x) 

假定您所處的環境支持計算鍵 (ES2015中可用)

這里是。

var x = {}, s = 1;
(0x10100110).toString(16).split('').reverse().map(a => {
    x[s] = !!~~a;
    s *= 2;
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM