[英]Compare data in bytes to a hex number
我需要從標准輸入讀取數據,我需要檢查 2 個字節是否等於 0x001 或 0x002,然后根據值執行兩種類型的代碼之一。 這是我嘗試過的:
uint16_t type;
uint16_t type1 = 0x0001;
while( ( read(0, &type, sizeof(type)) ) > 0 ) {
if (type == type1) {
//do smth
}
}
我不確定讀取使用什么數字系統,因為將類型的值打印為十進制和十六進制都會返回完全不同的東西,即使我在標准輸入上寫入 0001
字符 0x0001 和 0x0002 是 UTF-8 中的控制字符,您將無法手動鍵入它們。
如果您嘗試比較字符輸入 - 使用gets
和atoi
將基於字符的stdin
轉換為 integer,或者如果您想繼續使用 read - 比較字符'0' '0' '0' '1'/'2'
而不是得到正確結果的值
您沒有說您使用的是哪種操作系統。 如果您在命令行使用 Unix 或 Linux 或 MacOS,則可以很容易地使用簡單的方法來測試此類程序。 但是,如果您使用的是 Windows,很抱歉,我在這里的回答不會很有用。
(我還將大量使用 Unix/Linux 的“管道”概念,即豎線|
它將一個程序的 output 發送到下一個程序的輸入。如果你不熟悉這個概念,我的回答一開始可能沒有多大意義。)
如果是我,在將你的程序編譯為a.out
之后,我會運行
echo 00 00 00 01 00 02 | unhex | a.out
實際上,我確實將您的程序編譯為a.out
,並嘗試了這個,然后......它沒有用。 它不起作用,因為我的機器(就像你的機器一樣)使用 little-endian 字節順序,所以我應該做的是
echo 00 00 01 00 02 00 | unhex | a.out
現在它完美地工作了。
唯一的問題是,如果您嘗試過,就會發現unhex
不是標准程序。 它是我個人 bin 目錄中的一個小實用程序。 它非常方便,如果類似的東西是標准的,它會非常有用,但事實並非如此。 (可能有一個半標准的 Linux 實用程序來做這種事情,但我不知道它是什么。)
一個非常標准的並且您可能可以使用它的是 base-64 解碼器。 那里的問題是沒有很好的方法來手動生成您需要的輸入。 但我可以為你生成它(使用我的 unhexer)。 如果你能跑
echo AAABAAIA | base64 -d | a.out
這將對您的程序執行等效測試。 AAABAAIA
是三個 16 位 little-endian 字 0000 0001 和 0002 的 base-64 編碼,您可以通過運行看到
echo AAABAAIA | base64 -d | od -h
在某些系統上, base64
命令使用-D
選項而不是-d
來請求解碼。 也就是說,如果你收到類似“invalid option --d”這樣的錯誤信息,你可以試試
echo AAABAAIA | base64 -D | a.out
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.