У меня есть задача для хранения строк, т. е. 0C001A0001000800030000010501000000800100001003103F002A0, в 0x000C, 0x001A ,0x0001, 0x0008 ,0x0100

#networking #bit-manipulation #iot

Вопрос:

Я написал код для того же —

 var string = "0C001A0001000"; var buf = new ArrayBuffer(string.length*2); // 2 bytes for each char      var hex = new Uint16Array(buf);    for (var i =0, strLen=string.length; i < strLen; i  ){    hex[i] = (string[i] << (4*i) amp; 0XFF)  hex[i 1] = (string[i 1] amp; 0XFF);      }  console.log((hex));  

но результат таков : Uint16Array [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0 ] вместо шестнадцатеричных цифр . Я новичок в этой области, пожалуйста, укажите правильный код для того же самого . Результирующие шестнадцатеричные цифры должны быть в форме маленького конца.

Комментарии:

1. Пожалуйста, узнайте, как правильно делать отступы в коде, это поможет вам позже.

Ответ №1:

Шестнадцатеричный формат-это в основном формат отображения (вы не «сохраняете» ints в виде шестнадцатеричного); приведенный ниже код получает ints и отображает их в шестнадцатеричном виде.

 var string = "0123456789AB"; // len needs to be N * 4 (fixed to 12; was 13) var buf = new ArrayBuffer(string.length/2); // 4 chars for each 16bit # var hex = new Uint16Array(buf)   for (var i=0, strLen=string.length; i < strLen; i =4){  hex[i/4] = 0   hex[i/4]  = (parseInt(string[i 0],16) << (4*1))  hex[i/4]  = (parseInt(string[i 1],16) << (4*0))  hex[i/4]  = (parseInt(string[i 2],16) << (4*3))  hex[i/4]  = (parseInt(string[i 3],16) << (4*2)) }  for (var i=0, strLen=string.length; i < strLen/4; i  ){  console.log("0x"   hex[i].toString(16)) }  

Комментарии:

1. Что делать, если пользователь введет строку с пробелами ? . плюс, если строка нечетная, тогда ?