1.举例
十进制: -29 227
十六进制: 0xE3
二进制补码:1110 0011
2.应用实例
function startOta() {
//REQUEST_CTRL_OTA_START = 0
//maxSegmentBytesLength = 19
var startBytes = [REQUEST_CTRL_OTA_START, maxSegmentBytesLength, maxSegmentBytesLength >> 8]
//fireware是一个bin文件转成的uint8Array
var crcHex = crc32(firmware)
var lengthHex = firmware.length.toString(16)
var arr1 = startBytes.concat(Str2Bytes(crcHex))
var arr2 = arr1.concat(Str2Bytes(lengthHex))
console.log(Bytes2Str(arr2))
otaSendIntArr(arr2)
}
//十六进制字符串转字节数组(反过来)
function Str2Bytes(str) {
switch (str.length) {
case 3:
str = "00000" + str;
break;
case 4:
str = "0000" + str;
break;
case 5:
str = "000" + str;
break;
case 6:
str = "00" + str;
break;
case 7:
str = "0" + str;
break;
}
var pos = 0;
var len = str.length;
len /= 2;
var hexA = new Array();
pos = len * 2 - 2
for (var i = 0; i < len; i++) {
var s = str.substr(pos, 2);
var v = parseInt(s, 16);
hexA.push(v);
pos -= 2;
}
return hexA;
}
//字节数组转十六进制字符串
function Bytes2Str(arr) {
var str = "";
for (var i = 0; i < arr.length; i++) {
var tmp = arr[i].toString(16);
if (tmp.length == 1) {
tmp = "0" + tmp;
}
str += tmp;
}
return str;
}
3.参考博客
JS中二进制与十进制的相互转换
JavaScript 十进制和十六进制互转
16进制与buffer相互转换
JavaScript十六进制字符串和字节数组相互转换