理解printf 將位元組列印為十六進位時的意外輸出
使用向量資料型別(如包含char 元素的Pixel_data )時,通常會出現以下情況:嘗試以十六進位格式列印單一位元組時遇到意外結果。具體來說,使用 printf(" 0x%1x ", Pixel_data[0] ) 列印 Pixel_data[0] 可能會產生 0xfffffff5,而不是預期的 0xf5。
此行為源自於 printf 的特性,其中 %x 修飾符預期無符號整數作為其參數。因此,char 值(在提供給 varargs 函數時通常會提升為整數)被 printf 視為 int。
為了獲得可靠的結果,建議明確轉換為unsigned int :
printf(" 0x%1x ", (unsigned)pixel_data[0] );
此外,字段寬度為1 可能並不理想,因為它指定了要顯示的最小位數,並且總是至少有一位數字
如果系統上的char 作為有符號類型處理,則轉換可能會導致為負char 值產生較大的無符號int 值(例如 fffffff5)。為了確保位元組值被視為無符號,請對像素資料使用無符號字符,透過無符號字元進行轉換,或使用遮罩操作:
printf(" 0x%x ", (unsigned)(unsigned char)pixel_data[0] ); printf(" 0x%x ", (unsigned)pixel_data[0] & 0xffU );
以上是為什麼「printf」在列印位元組時顯示意外的十六進位輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!