print列印16進位制時前面會多很多FF,解決辦法。
最近在做一個3des軟加密的專案,發現在C語言中用printf()函式列印字元型變數時,如果想採用"%x"的格式將字元型變數值以十六進位制形式列印出來,會出現一個小問題,如下:
- char buf[10] = {0};
- buf[0] = 0xbf;
- printf("%2x\n\n\n", buf[0]); /*在終端將會顯示成:ffffffbf*/
- buf[1] = 0x7f;
- printf("%2x\n\n\n", buf[1]); /*在終端將會顯示成:7f*/
為什麼buf[0]不像buf[1]顯示的那樣,顯示2個十六進位制數bf呢?
研究發現,只要字元型變數值的二進位制第一位是1,就會如buf[0]所顯示的那樣,出現6個f。
而格式輸出函式printf中會對所輸出的變數做有符號/無符號型的判斷。如果是有符號型變數,且該值二進位制首位為1(如我們定義的是char buf[100],且buf[0]中為0xbf),則會按照補碼形式前面全置為1,也就是全為f。
按照上面述說的,如果把buf宣告為unsigned char型,則顯示會變成:bf
如果程式需要一個有符號型的變數以十六進位制形式輸出,且只顯示兩位,可以強制型別轉換為無符號型變數,如上面的buf[0],可以轉換成:(unsigned char)buf[0]
相關文章
- python 以16進位制列印輸出Python
- python以16進位制列印位元組陣列Python陣列
- vue中 window.print() 解決列印和隱藏同時進行的問題Vue
- printf列印16進位制資料,高位補零的方法。
- Python print函式控制檯中文輸出16進位制問題Python函式
- 口算 16 進位制轉換 10 進位制,但只適合兩位的 16 進位制
- 該文件未能列印的解決辦法
- jquery uploadify在FF下無效的解決辦法jQuery
- JavaScript 進位制轉換(2進位制、8進位制、10進位制、16進位制之間的轉換)JavaScript
- ubantu 16.04 PHP 時間差 8 小時解決辦法PHP
- Ubuntu 16.04 PHP 時間差 8 小時解決辦法UbuntuPHP
- 進位制詳解:二進位制、八進位制和十六進位制
- 記憶體資料的十六進位制Print記憶體
- shell 中轉換16進位制10進位制
- 印表機無法列印的原因與解決辦法
- C# 2進位制、8進位制、10進位制、16進位制...各種進位制間的輕鬆轉換C#
- 電腦前面耳機沒聲音 電腦前面耳機沒聲音的解決辦法
- 10進位制和16進位制互轉的例子
- 電腦前面沒聲音後面正常的解決辦法
- 電腦前面耳機沒聲音的解決辦法 電腦前面插耳機沒聲音怎麼辦
- python 數字 十六進位制 列印Python
- 2進位制_8進位制_16進位制之間快速轉換的技巧.txt
- Java中8進位制和16進位制的表示方法Java
- printf()將10進位制數安照輸出16進位制,8進位制輸出
- C printf按8進位制、10進位制、16進位制輸出以及高位補0
- Java 16進位制字串 取反Java字串
- ORA-16038 的解決辦法
- Ora-01632解決辦法
- oracle_16進位制與10進位制轉換小示例Oracle
- C語言中printf打出2進位制與16進位制數C語言
- sql實現10進位制16進位制轉換函式SQL函式
- 3416:【例72.1】 二進位制轉化為十進位制
- JavaScript中的多種進位制與進位制轉換JavaScript
- C語言進位制轉換與列印C語言
- eclipse啟動時記憶體溢位的解決辦法Eclipse記憶體溢位
- 二進位制方式解決 power 問題
- 在c語言中輸出8進位制數,16進位制數C語言
- 負數補碼(16進位制轉10進位制的負數)