了解printf 十六進位列印行為
使用printf 列印字元的十六進位表示法時,如果傳遞一個char 而沒有顯式轉換。這是由於 printf 的行為造成的,它需要 %x 修飾符使用 unsigned int 參數。
字元提升和未定義行為
在 C 中,字元 (char ) 通常在 varargs 函數(例如 printf)中提升為 int。但是,int 的大小因平台而異,如果未明確轉換 char,可能會導致未定義的行為。
明確轉換以獲得可預測的結果
確保可預測的結果,在列印之前將 char 明確轉換為 unsigned int。這將防止意外行為並顯示正確的十六進位表示:
字段寬度注意事項
請注意,為十六進制打印設置字段寬度 1並不特別很有用,因為它指定要顯示的最小位數,並且始終至少顯示一位數字
無符號字符處理
如果平台上的字符被簽名,正確處理它很重要。為了避免將負 char 值轉換為大的 unsigned int 值,請考慮使用 unsigned char 或使用 unsigned char 或遮罩操作明確轉換該值:
以上是為什麼「printf」在列印字元時會產生意外的十六進位輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!