怎樣在螢幕上以十六進製制樣式顯示記憶體中的一段資料

2021-04-23 02:20:59 字數 1213 閱讀 5288

怎樣在螢幕上以十六進製制樣式顯示記憶體中的一段資料。

下面分以下幾步來介紹:

1、位元組轉換成十六進製制字元 2

、資料塊轉換成十六進製制字串 3

、將十六進製制字串格式化輸出 4

、將前面三步綜合,將一段資料以十六進製制顯示。 1

、位元組轉換成十六進製制字元

定義十六進製制字元的常量字串,然後用位元組的高四位和低四位分別作下標來直接訪問常量錶即得到十六進製制的字元。(該功能用

c語言庫中的

ltoa

函式能很方便的實現)

void dtoh(uint8 * hex,uint8 n)

2、資料塊轉換成十六進製制字串

將一塊資料轉化成

16進製制,存放到

out

所指的緩衝區,

len為要轉換的位元組個數

void dump_block(char * in,char * out,int len)

}

3、將十六進製制字串格式化輸出

本函式關鍵是用好

printf

的格式化輸出功能。

①printf("%08xh:",row_cnt++);

中的"%08x",

表示輸出十六進製制整數,寬度為

8個字元,左填充0。

②printf("0x%-3.2s",in + size * cur)

;中"%-3.2s"

表示輸出字串,寬度為

3,精度為

2(精度表示最多輸出兩個字元,多的捨去)左對齊,右填充空格。

該函式每次顯示

size

個字元,共顯示

len次,字串起始位址in

void hex_disp(char * in,int len,int size)

} while(cur < len);

}

顯示效果如下:

4、將前面三步綜合,將一段資料以十六進製制顯示。

下面的函式將對指定位址和長度的資料段以十六進製制顯示其內容。

void dump (char * in,int len)

5、改進

以 上介紹的對資料以十六進製制方式顯示的方法,對資料較少的情況不錯,但如果資料很大,就有問題了。上面的方法中轉換時總是申請足夠的緩衝區空間,而其實這是 不必要的。將資料改變形式輸出與資料的前後完全沒有關係,因此可以邊轉換邊輸出。這樣就避免因緩衝區申請過大帶來的問題了。

十六進製制的TXT檔案怎麼以十六進製制讀出來?

txt中的內容是4e6574776f726b205365637572697479 但是執行後的不是txt中的十六進製制內容,include include include include typedef unsigned char byte typedef unsigned int dword 32...

在MATLAB中實現十進位制和十六進製制數的轉化方法

在matlab中算出了乙個十進位制的陣列 有幾百個單元 如何把這些十進位制的書轉化為16進製制呢?如果是正數直接使用dec2hex函式。如果是負數,將其轉換為反碼再用dec2hex。轉換規則 對n位二進位制表示的有符號十進位制數,其數值範圍為 2 n 1 2 n 1 1,對正數n,對應十六進製制數為...

QString之以十六進製制的數進行收發資料

參考部落格 並根據部分改編得到 一 將十六進製制的單個字元,轉換為10進製,如 f 對應為15 void mainwindow on pushbutton clicked else if ch a ch f else if ch a ch f else return 1 二 將以十六進製制表示的字串...