在程式的除錯過程中,經常需要輸出各種資料,正常情況下使用
printf
和cout
即可實現資料輸出。然而在輸出二進位制資料時,
printf
和out
卻有點無能為力。那麼如何比較二進位制資料是否正確呢?
方案一:檔案輸出。檔案可以輸入任何資料,但是需要在程式之外比較檔案,這對於少量資料並不划算。
方案二:實現自定義的十六進製制輸出函式。當然,也可是八進位制,一般而言十六進製制更易看懂(習慣
)。下面給出乙個最近實現的此類函式。該函式可將指定長度任何記憶體資料以十六進製制格式輸出。
這個程式對32和
64位的
pc均適用。
注意:%x無法正確列印負數,負數總是列印成
32bit
整型數,64位
pc也是如此。
#include #include void hexoutput(const char* buf, size_t len) else } printf("\n"); } int main() ; hexoutput(buf, 20); std::string str = "brsacp"; hexoutput(str.c_str(), str.size()); buf[0] = 0xfd; buf[1] = 0xfe; hexoutput(buf, 2); memcpy(buf+2, str.c_str(), str.size()); hexoutput(buf, 20); long long value = 0xfdfe425253414350llu; // llu or ll is necessary for 32 pc hexoutput((char*)&value, 8); return 0; }
程式輸出為:
the hex output of data : //char c = 'a'
0x41
the hex output of data : // char c=』a』
0x61
ffffffff
the hex output of data : // char c =255
0xff
the hex output of data : // char c = -1
0xff
ffffffff
the hex output of data : // short sc = -8;
0xf8ff
fffffff8
the hex output of data :
0x0000000000000000000000000000000000000000
the hex output of data : // std::string str = "brsacp";
0x425253414350
the hex output of data : // buf[0] = 0xfd; buf[1] = 0xfe;
0xfdfe
the hex output of data :
0xfdfe425253414350000000000000000000000000
the hex output of data :
0x504341535242fefd
Excel輸入十六進製制數,以及十六進製制運算
網上覆制來複製去的連個靠譜答案都沒有.f k 所以無奈自己探索出來了 單元格 a1文字值 a2進製值 輸入內容 fefe oct2hex hex2oct a29 由於單元格沒有提供進製格式,所以填入的值實際上是文字值,但是轉換函式卻可以把文字值視為進製值拿去轉換 所以我們兩次轉換就能得到真正的進製數...
進製轉換 十六進製制轉八進位制 十六進製制轉十進位制
在十六進製制轉為八進位制的過程中包含了將十六進製制轉化為二進位制以及將二進位制轉化為八進位制!我自己測試是沒什麼問題,但是在藍橋杯官網的測試系統就顯示執行錯誤qwq 不知道為什麼 附 include includeusing namespace std int main if len2 i 3 2 ...
十六進製制位元組 十六進製制轉二進位制
做專案也將近一年的時間了。從一開始就經常提到 乙個十六進製制位元組 然而一開始就是迷惑的,直到現在。乙個十六進製制位元組,比如 ff。周圍的人經常說這是乙個十六進製制位元組。然後我就想,這不是兩個字元嗎,分別是f 和f,乙個字元是乙個位元組,兩個字元是兩個位元組,怎麼就成乙個十六進製制位元組,就成乙...