Конвертировать шестнадцатеричное число в массив - PullRequest
0 голосов
/ 14 января 2019

Я хочу преобразовать шестнадцатеричное число (скажем, 0xABCDEF) в массив (0xABCDEF -> [0xAB; 0xCD; 0xEF]

Я проверял этот код:

  generateHexaArrayOf2FromHexaNumber (hexaNb){  
    var size = 1;
    var hexaNbTempo = hexaNb;

    while ((hexaNbTempo / 0xFF) > 1) {
      hexaNbTempo = hexaNbTempo / 0xFF;
      size++;
    }

    var hexaArray = new Array(size);
    for (var i= 0; hexaNb > 0; i++) {
      hexaArray[i] = hexaNb % 0xFF
      hexaNb = Math.floor(hexaNb / 0xFF) // round to lower
    }
    hexaArray.reverse();
    return hexaArray;
  }

Результат возвращается в ASCII, а не в гекса (есть С 0xABCDEF в качестве записи он возвращает [173 (= 0xAD), 39 (= 0x27), 105 (= 0x69)]

Знаете ли вы, почему это неправильно и как это исправить?

1 Ответ

0 голосов
/ 14 января 2019

Заменить все 0xFF на 0x100. В конце концов, вы пытаетесь создать массив base-256, а не base-255.

Кроме того, вам действительно не нужно вычисление size. Вы также можете вернуть hexaArray.reverse() напрямую. Также используйте push вместо прямого присваивания свойства. Ваш код также оставил массив пустым для ввода 0, но разве вы не ожидаете [0] в качестве вывода?

Вместо .push вы также можете использовать .unshift и удалить .reverse().

Исправленный код:

function generateHexaArrayOf2FromHexaNumber(hexaNb) {
  var hexaArray = [];
  
  for (var i = 0; hexaNb > 0; i++) {
    hexaArray.push(hexaNb % 0x100);
    hexaNb = Math.floor(hexaNb / 0x100);
  }

  if(!hexaArray.length){
    hexaArray.push(0);
  }
  
  return hexaArray.reverse();
}

console.log(generateHexaArrayOf2FromHexaNumber(0x1)); // => [ 1 ]
console.log(generateHexaArrayOf2FromHexaNumber(0xabcdef)); // => [ 171, 205, 239 ]
console.log(generateHexaArrayOf2FromHexaNumber(0xabcdef).map((x) => x.toString(16).padStart(2, "0"))); // => [ "ab", "cd", "ef" ]
console.log(generateHexaArrayOf2FromHexaNumber(0xdeadbeef).map((x) => x.toString(16).padStart(2, "0"))); // => [ "de", "ad", "be", "ef" ]
console.log(generateHexaArrayOf2FromHexaNumber(0x0).map((x) => x.toString(16).padStart(2, "0"))); // => [ "00" ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...