Argümanın işaretsiz bir karakter olduğunu hhsöylemek için kullanabilirsiniz printf. Kullanım 0sıfır doldurma almak ve 22'ye genişliğini ayarlamak için xveya Xdaha düşük / büyük harf heks karakterler için.
uint8_t a = 0x0a;
printf("%02hhX", a); // Prints "0A"
printf("0x%02hhx", a); // Prints "0x0a"
Düzenleme : Okuyucular, 2501'in bunun bir şekilde 'doğru' biçim tanımlayıcıları olmadığına dair iddiasından endişe duyuyorlarsa, printfbağlantıyı yeniden okumalarını öneririm . Özellikle:
% C, int bağımsız değişkenini beklese de, bir variadic işlev çağrıldığında gerçekleşen tamsayı yükseltmesi nedeniyle bir char iletmek güvenlidir.
Sabit genişlikli karakter türleri (int8_t, vb.) İçin doğru dönüştürme özellikleri, başlıkta <cinttypes>(C ++) veya <inttypes.h>(C) tanımlanır (PRIdMAX, PRIuMAX vb.% Jd,% ju, vb . İle eşanlamlıdır) .
İşaretli ve işaretsiz hakkındaki düşüncesine gelince, bu durumda önemli değildir çünkü değerler her zaman pozitif olmalı ve işaretli bir int'e kolayca sığmalıdır. Yine de imzalı onaltılık biçim belirticisi yok.
Düzenleme 2 : ("ne zaman-yanılıyorsunuz?" Baskısı):
Gerçek C11 standardını 311. sayfada okursanız (PDF'nin 329'u) şunları bulursunuz:
ss: belirtir, takip eden bir bu d, i, o, u, x, veya Xdönüşüm belirteci bir geçerli olduğu signed charya da unsigned charbağımsız değişken (değeri bir tamsayı promosyonlara göre teşvik edilmiş olacaktır, ama değeri çevrilir signed charveya unsigned charbaskı öncesi); veya aşağıdaki ndönüşüm belirticisinin bir signed charbağımsız değişkene işaretçi için geçerli olduğu .
"\xc0\xc0abc123"