C 語言 字元型的16進製制輸出

2021-06-17 19:47:14 字數 2799 閱讀 7474

今天早上閒來無事,在看我們公司是怎麼開啟root許可權的。

發現在adb.c裡面加了乙個字元陣列。

然後在和sd卡上的乙個檔案比較。

然後,我就寫了乙個函式,把這個檔案以18進製輸出。

int check_file()

size = fread(data,1,check_file_size,fp);

temp=size;

for( i=0; i

輸出d      ffffff9c

ffffffcd        ffffffdb        60       d      5c      1d      ffffff90        5e      31      ffffffe9        ffffffda        1d      72      57      fffffff3        ffffffea

ffffffbb        52      ffffffc9        23      ffffffd7        2e      55      ffffffa6        ffffff80        2a      24      49      ffffff83        ffffffea         1      ffffff92

a      fffffff2        ffffff9e        55      fffffffc        ffffffd5        27      61      ffffffd5        ffffffa8        fffffff3        ffffffa5        ffffff8e        6f       fffffff3        6f

21      ffffffc6        ffffffac        40      ffffffbb        ffffffdf        7c      ffffffbb        63      fffffff2        48      14      ffffff91        31      3e      ffffffa3

ffffffbb        ffffff9f        1e      ffffff9d        ffffffc3        ffffffb6        ffffffb3        ffffff9c         7      fffffff7        fffffffe        22      ffffff8129       2f      ffffffd4

5c      ffffff8c        17      fffffff3        62      ffffffe5        ffffffc4        3d      4e      63      3b      ffffffb4        16      68      ffffffa3        12

fffffff2        ffffffbb        15      ffffffdf         6      ffffff98        4f      74      26      ffffffd8        6e      ffffffe7        ffffffe1        38      ffffffbf75

ffffffd1        ffffff8a        2d      69      3d      ffffffea        2b      ffffffd5         9      ffffffcd        22      70      60      16      11      63

6e      ffffffdf        62      ffffff8b        43      7c       8      ffffffba        56      ffffff97         b      72      2f       a      28      2a

26      ffffffbb        1a      7b      fffffff6        ffffffc1        3e      ffffffae   

研究發現,有ffffff的都是第一位是1,如0x90對應的2進製10010000,0xda對應的2進製11011010。

所以,只要第一位是1,就會多打出6個f。

究其原因,

%x 是 unsigned int  或  int  型輸出

,所以 printf("%x", a) 在執行時將自動將 a 型別提公升(char 將提公升至 int;unsigned char 將提公升至 unsigned int), 注意到 char 是 signed(有符號的),如果這時 

a 是負數

,在提公升的時候

前面將會補1

,即象反例中的 0xf1 => 0xfffffff1;而unsigned char 在提公升的時候只會補0。

怎麼解決,強制轉換成unsigned char 輸出。

0x0d,0x9c,0xcd,0xdb,0x60,0x0d,0x5c,0x1d,0x90,0x5e,0x31,0xe9,0xda,0x1d,0x72,0x57,

0xf3,0xea,0xbb,0x52,0xc9,0x23,0xd7,0x2e,0x55,0xa6,0x80,0x2a,0x24,0x49,0x83,0xea,

0x01,0x92,0x0a,0xf2,0x9e,0x55,0xfc,0xd5,0x27,0x61,0xd5,0xa8,0xf3,0xa5,0x8e,0x6f,

0xf3,0x6f,0x21,0xc6,0xac,0x40,0xbb,0xdf,0x7c,0xbb,0x63,0xf2,0x48,0x14,0x91,0x31,。。。。。

C語言16進製制字串轉數字

詳解c c 中十六進製制字串轉數字 數值 主要有兩個方法,其實都是對現有函式的使用 方法1 sscanf 函式名 sscanf 功 能 從字串格式化輸入 用 法 int sscanf char string,char format argument,以上的 format 為 x 就是將字串格式化為 ...

c語言 字串與16進製制互轉

1 字串轉16進製制 des data 輸出緩衝區 src data 字串 des len 16進製制數的位元組數 字串的長度 2 remarks 將字串轉化為16進製制數 void str to hex char des data,char src data,int des len 2 16進製制...

java 16進製制字串轉16進製制

author yaodaqing 姚大慶 public class test 將兩個ascii字元合成乙個位元組 如 ef 0xef param src0 byte param src1 byte return byte public static byte unitebytes byte src0...