Apabila bekerja dengan vektor aksara (data_pixel), mencetak satu bait sebagai nilai perenambelasan (printf(" 0x %1x ", pixel_data[0])) mungkin secara tidak dijangka menghasilkan integer empat bait (0xfffffff5) dan bukannya nilai yang dimaksudkan (0xf5).
Printf biasanya menjangkakan parameter integer yang tidak ditandatangani untuk pengubah suai %x. Walau bagaimanapun, aksara dinaikkan kepada int apabila dihantar ke fungsi varargs seperti printf. Promosi ini menghasilkan pencetakan bait tambahan.
Untuk memastikan hasil yang boleh diramal, hantar aksara secara eksplisit ke int yang tidak ditandatangani:
printf(" 0x%1x ", (unsigned)pixel_data[0]);
printf(" 0x%x ", (unsigned)(unsigned char)pixel_data[0]);
printf(" 0x%x ", (unsigned)pixel_data[0] & 0xffU);
Lebar medan %1x menentukan bilangan minimum digit untuk dipaparkan. Walau bagaimanapun, ia mempunyai kegunaan terhad dalam konteks ini kerana sekurang-kurangnya satu digit sentiasa diperlukan.
Atas ialah kandungan terperinci Mengapakah `printf` Menunjukkan Output Tidak Dijangka Semasa Mencetak Bait Perenambelasan daripada Vektor Char?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!