簡體   English   中英

如何將十六進制數據(存儲在字符串變量中)轉換為整數值

[英]How to convert hexadecimal data (stored in a string variable) to an integer value

編輯(摘要)

我試圖將Char / String數據解釋為Byte ,一次 4 個字節。 這是因為我只能讓TComport / TDatapacket將流數據解釋為字符串,而不是任何其他數據類型。 我仍然不知道如何讓Read方法和OnRxBuf事件處理程序與 TComport 一起工作。

問題總結

我正在嘗試使用一些 Delphi 代碼從質譜儀 (MS) 獲取數據。 儀器通過串口線連接,遵循RS232協議。 我能夠毫無問題地發送命令並處理來自 MS 的基於文本的輸出,但是我在解釋數據緩沖區時遇到了麻煩。

背景

來自本儀器的用戶手冊:

“除了離子電流值,RGA 的輸出都是以換行符+回車符結束的 ASCII 字符串。離子信號以 10^-16 安培為單位的整數表示,並以十六進制格式直接傳輸(四字節整數,2 的補碼格式,最低有效字節在前)以獲得最大數據吞吐量。

我不確定(1)十六進制數據是否可以正確存儲在字符串變量中。 我也不確定如何(2)在 Delphi 中實現 2 的補碼和(3)首先實現最低有效字節。

按照@David Heffernan 的建議,我去修改了我的數據類型。 嘗試從字符中獲取二進制數據是行不通的,因為並非 0-255 之間的所有值都可以正確表示。 基本上,您會在此過程中丟失數據。 特別是您的數據一次表示 4 個字節。

我的解決方案是使用 Async Professional 組件而不是 Denjan 的 Comport 庫。 它可以更好地處理數據流,並有一個內置日志,我可以用它來弄清楚如何解釋來自儀器的流式響應。 它也有更好的記錄。 所以,如果你是串行通信的新手(就像我一樣),那就試一試吧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM