javascript 我需要创建一个从字符串中获取值并编辑数字的函数

x0fgdtte  于 2023-10-14  发布在  Java
关注(0)|答案(2)|浏览(90)

我有这个字符串03.00.20.80.0F.00.00.68.98.01。最后两个字节98.01.有关于温度的信息。我需要创建JavaScript函数,将最后两个字节从十六进制数0198转换为19和8。这个数字我想从十六进制数字转换为十进制和总和在一起。所以它给了我25.8。它必须是可变的任何数字,因为我可以从我的传感器接收其他字符串,如03.00.20.80.0F.00.00.54.09.02。
我尝试了这个函数,但它返回值为0.1

function splitAndConvertHex(hexString) {
  
  const bytes = hexString.split('.');
  
  const lastTwoBytes = bytes.slice(-2).join('');
  
  const hexValue = '0x' + lastTwoBytes;
  
  const intValue = parseInt(hexValue) >> 8;
  const floatValue = (parseInt(hexValue) & 0xFF) / 10;

  return [intValue, floatValue];
}

const hexString = "03.00.20.80.0F.00.00.68.98.01.";
const [wholeNumber, decimalNumber] = splitAndConvertHex(hexString);

const result = wholeNumber + decimalNumber;
console.log("Výsledek: " + result);
hivapdat

hivapdat1#

不确定从98.01获取25.8背后的逻辑,但这会产生正确的值:

function splitAndConvertHex(hexString) {
  // "03.00.20.80.0F.00.00.68.98.01" --> 198
  let x = parseInt(hexString.split('.').slice(-2).reverse().join(''));
  return [parseInt((x / 10).toString(), 16), parseInt((x % 10).toString(), 16)];
}

console.log(splitAndConvertHex("03.00.20.80.0F.00.00.68.98.01"));
6ioyuze2

6ioyuze22#

从你的问题中我理解到,我认为代码应该是这样的:

// Define a function that takes a hexadecimal string as input
function hexToTemp(hexString) {
  // Get the last two bytes of the string
  let lastTwoBytes = hexString.slice(-5);
  // Split the bytes into two parts
  let firstByte = lastTwoBytes.slice(0, 2);
  let secondByte = lastTwoBytes.slice(3);
  // Convert the bytes from hexadecimal to decimal
  let firstDecimal = parseInt(firstByte, 16);
  let secondDecimal = parseInt(secondByte, 16);
  // Sum the decimals and divide by 10 to get the temperature
  let temp = (firstDecimal + secondDecimal) / 10;
  // Return the temperature
  return temp;
}
// Test the function with an example string
let exampleString = "03.00.20.80.0F.00.00.68.98.01";
let exampleTemp = hexToTemp(exampleString);
console.log(exampleTemp); // the output is 15.3

我不确定这将回答你的问题,但你可以尝试,如果你有任何问题或意见,让我知道

相关问题