vue/uniapp中,如何将十六进制字符串转换成有符号 2 补码中的十进制?

需要判断有没有负号,有负号拿有负号的值,没负号就拿正常的的值,

例如c4转换后为-60,格式就是像c4这样的,全是两位的

小弟在这里先感谢各位大神们,感激不尽,祝大神们发财祝大神们取漂亮老婆

阅读 3.7k
3 个回答

都是 int8 呗?那直接位移更简洁一些:

function hex2dec_int8(hex) {
  const BITS = 8;
  const dec = parseInt(hex, 16);
  return 0x80000000 >> (32 - BITS) | dec;
}

console.log(hex2dec_int8('c4'));

可以直接简化成:

const hex2dec_int8 = (hex) => -128 | parseInt(hex, 16);

console.log(hex2dec_int8('c4'));

应该不会有比这个更简便更高效的写法了。

其实问gpt然后调试下就好啦
function hexToDecimal(hexStr) {
  // 将十六进制字符串转为整型数值
  var num = parseInt(hexStr, 16);
  // 如果是负数,则转换为对应的负数
  if ((num & 0x80) === 0x80) {
    num = -(0x100 - num);
  }
  return num;
}


var hexStr = 'c4';
var decimal = hexToDecimal(hexStr);
console.log(decimal);  // -60
function hexc2dec(hexc) {
  // 将16进制补码转换为10进制补码
  const intc = parseInt(hexc, 16);

  // 如果最高位为1,表示负数
  if (intc & (1 << (hexc.length * 4 - 1))) {
    return intc - (1 << (hexc.length * 4));
  }

  return intc;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏