Итак, в основном у меня есть пара чисел, которые выводятся в виде шестнадцатеричных значений в форме «3FF0000000000000», и я хочу получить из них значения с плавающей запятой, почти как в здесь Так что в этом конкретном случае я ожидаю « 20.000000000000000" в результате, который я позже урежу только до 5 знаков после запятой, но это должно быть достаточно просто.
Я пробовал несколько решений, но, к сожалению, я слишком мало знаю о конверсиях (и javascript), чтобы точно знать, что я могу делать неправильно.
Последняя попытка выглядит примерно так:
const hexToFloat64 = (hex) => {
var int32 = [],
float64;
if (hex.length > 4) {
var high = hex.substr(0, 8),
low = hex.substr(8, 8);
int32.push(parseInt(high, 16), parseInt(low, 16));
}
var uint32 = new Uint32Array(int32);
float64 = new Float64Array(uint32.buffer);
var returnValue = float64[0];
return returnValue;
};
Весьма признателен!
@GetSet Извините, но я не совсем уверен, что вы имеете в виду под «спецификацией от источника до места назначения для обмена». В основном у меня есть пара значений, закодированных (вне моей досягаемости) как HEX, и мне просто нужно интерпретировать их как числа с плавающей запятой, чтобы отобразить их в представлении. У меня были другие значения в виде "43CAA727", но для них мне, к счастью, удалось найти решение.
Хорошо. Я понимаю. Представление шестнадцатеричного числа в виде числа с плавающей запятой, вероятно, является тупиковым. Шестнадцатеричный сам по себе является либо недесятичным числом, либо структурой данных. Я предполагаю, что требуется больше контекста о том, откуда берутся эти значения?
Для дальнейшей «просвещенной» помощи вам нужно будет хотя бы частично указать, как вы вообще получили шестнадцатеричные данные. Таким образом можно решить, является ли то, что вы видите как шестнадцатеричный код, на самом деле не числом, а конкатенированными данными, как в структуре данных.
Однако это ни в коем случае не будет «плавать». Поплавок для приближений. Там никто не хранит определенные данные.
Я делаю мыльный вызов на сервер, который отправляет обратно массив значений HEX, которые я затем должен интерпретировать, как описано выше... Ничего необычного и довольно простого, чтобы получить значения, однако их интерпретация - это другая история.
К сожалению, я не знаю, как числа преобразуются в шестнадцатеричные значения. Я знаю только ожидаемый результат и значение HEX. Не совсем идеально, согласен. Обновлено: Чтобы уточнить, я знаю ожидаемый результат от другого небольшого приложения, которое может читать эти значения и отображать все в таблице. Но опять же, у меня нет доступа к его коду или чему-то еще.
Тогда это, вероятно, «шестнадцатеричная строка». Вы можете конвертировать с интервалом в 2 символа, чтобы увидеть, что возвращается
Также моей первой мыслью было, где и смотрели ли вы «документы» по возвращению «мыльного» вызова? Я дам вам код, чтобы «расшифровать» шестнадцатеричный код. Один момент, пожалуйста.
Это НЕ ответ на вашу конкретную проблему. Это решение для декодирования шестнадцатеричного кода. Это все, что я здесь делаю. У меня нет контекста для решения вашей проблемы.
function convHexStringToString(ss) {
// ss length must be even (or 0) when passed to this function
var s = "";
var p;
if (ss.length > 0) {
if (ss.length % 2 == 0) {
var l = Math.floor(ss.length / 2); // floor must never have to do work
for (var i = 0; i < l; i++) {
var i2 = i * 2;
if (ss.charAt(i2) != "0") {
p = ss.charAt(i2) + ss.charAt((i2) + 1);
}
else {
p = ss.charAt((i2) + 1);
}
d = parseInt(p,16);
s += String.fromCharCode(d);
}
}
}
return s;
}
Спасибо за ответ! Хотя это не решило мою проблему, это дало мне несколько советов о том, как дальше обдумывать проблему. Я также попытаюсь выяснить, как строятся эти HEX-значения. Еще раз, спасибо за ваше время!
Возможны все преобразования числовых типов данных. У вас есть «спецификация» от пункта отправления до пункта назначения, чтобы поделиться? ......... 64-битное шестнадцатеричное или любое шестнадцатеричное число, скорее всего, будет преобразовано в «целое число». Или иначе, не подходит для преобразования и представляет собой «структуру данных».