hextonumber 不適用於 64 位元你好
我的十六進位是bea000000004080bh,我嘗試了 hextonumber("bea000000004080bh"),但它不起作用。有人可以幫我嗎?
自動化和腳本編寫回覆:hextonumber 不適用於 64 位你好,
您確定它是 64 位元十六進制嗎?包含“h”數字似乎不符合標準格式。
最好的,
TS
回覆:hextonumber 不適用於 64 位抱歉,忘記刪除末尾的 h 了。輸出 raw 的結尾總是有 h 來指示十六進位值,我們需要在執行 hextonumber 之前排除它。
現在的問題是它與我們預期的數字不符。
JMP 將其轉換為 -4.768372e-7
預期為-4710765210229274613

我缺什麼?
回覆:hextonumber 不適用於 64 位您顯示的值是有符號整數,而 HexToNumber() 會傳回無符號整數。
您還需要指定基礎,例如
a = HexToNumber("bea000000004080b",Base(16));
要解決有符號整數問題,您可以使用以下公式:
max = HexToNumber("7fffffffffffffff",Base(16));
a = HexToNumber("bea000000004080b",Base(16));
if( a > max,
result = -(max+1) + (a-max);
, // else
result = a;
);
但隨後您會遇到另一個問題,即 JMP 無法精確呈現 64 位元整數值。最後兩位數字將被截斷並具有隨機值。我建議將 64 位元值分解為較高的 32 位元值和較低的 32 位元值,並將這些值儲存在兩個單獨的欄位中。像這樣的東西:
Upper32 = HexToNumber( Left( :hex64, 8 ), Base( 16 ));<BR />Lower32 = HexToNumber( Right( :hex64, 8 ), Base( 16 ));
請參閱所附資料表示例。
回覆:hextonumber 不適用於 64 位聽起來 hextonumber() 需要改進,為什麼它不能像計算器那樣做(請參閱第一篇文章中的圖片)?
在處理數百萬個數據點時,分解上限和下限 32 的效率並不高。我必須處理數百個文件,每個文件包含超過 40M 行的十六進位值。分解32會消耗太多時間。
還有其他建議嗎?
回覆:hextonumber 不適用於 64 位我會為此使用 python。好消息是 JMP18 可以直接在 JMP 中執行 python 腳本。這將是執行你想要的操作的 python 腳本:
import binascii
h = 'bea000000004080b'
b = bytes(h, 'utf-8')
ba = binascii.a2b_hex(b)
print(int.from_bytes(ba, byteorder='big', signed=True))
至於為什麼 JMP 的精確度限制為 17 位,那是因為 JMP 使用 float64 來表示數值。要獲得超過 17 位數字,JMP 需要使用 float128 重新編譯數值,從而導致它使用更多系統記憶體。如果這很重要,您可以將其作為功能請求提交。您可以在這裡執行此操作:https: //community.jmp.com/t5/JMP-Wish-List/idb-p/jmp-wish-list
回覆:hextonumber 不適用於 64 位@dadawasozo什麼是太多時間(您有超過 40 000 000 * 100 行資料)?如果您必須快速轉換該數據,您可能需要有點創意(與此沒有直接關係,但閱讀“十億行挑戰”很有趣, https://github.com/gunnarmorling/1brc,您可以還可以從google 找到其他語言的解決方案,YouTube 上也有影片顯示和解釋一些解決方案)。
@mzwald當您返回JMP時,除了轉換為字串之外,是否有任何方法可以避免“OverflowError:Python int太大,無法轉換為C long”?分割價值?
Names Default To Here(1);
hex_to_signed_int_str = function({h},
Python Execute({h}, {x},
"\[import binascii
b = bytes(h, 'utf-8')
ba = binascii.a2b_hex(b)
x = int.from_bytes(ba, byteorder='big', signed=True)
#x = str(x)
]\");
return(x);
);
signed_int_str = hex_to_signed_int_str("bea000000004080b");
show(signed_int_str);
回覆:hextonumber 不適用於 64 位@jthi分割值或儲存為字串將是保留所有數字的唯一方法。由於 C++ 中 float64 變數的限制,JMP 中的任何數值都會限制為 17 位元。顯然,Python 具有無限的精度,數值不限於 64 位元或 128 位,只要有 RAM 支持,就可以根據需要使用盡可能多的位元來儲存該值。
回覆:hextonumber 不適用於 64 位是的,我們為此整合了 python。
感謝大家的意見。