簡體   English   中英

如何找到 uint_fast32_t 的寬度

[英]How do I find the width of a uint_fast32_t

我希望能夠移植fprintf()一個uint_fast32_t ,如stdint.h中定義的那樣,所有前導零。 例如,如果我的平台將uint_fast32_t定義為 64 位無符號 integer,我想使用%016lX之類的格式說明符fprintf() ,但如果它是 32 位無符號 Z157DB7DF530023575515D366C9B6708lX8,我想使用%08lX

我可以在某處使用像INTFAST32_BITS這樣的宏嗎?

現在我正在使用

#if UINT_FAST32_MAX == 0xFFFFFFFF
#    define FORMAT "08"PRIXFAST32
#elif UINT_FAST32_MAX == 0xFFFFFFFFFFFFFFFF
#    define FORMAT "016"PRIXFAST32
#endif

但這僅適用於 32 位或 64 位寬的uint_fast32_t ,而且代碼也有點笨重且難以閱讀

您可以像查找任何其他類型的大小一樣查找uint_fast32_t的大小:通過對其應用sizeof運算符。 結果的單位是char類型的大小。 例子:

size_t chars_in_a_uint_fast32_t = sizeof(uint_fast32_t);

但這對於使用printf -family 函數之一進行打印是不夠的。 printf等中出現未定義的行為。 人。 如果任何格式化指令與相應參數的類型不匹配,並且uint_fast32_t的大小信息不足以進行正確匹配。

這是您在其他答案中已經描述的格式化宏的來源。它們為每種類型和轉換提供了適當的大小修飾符和轉換字母。 對於uint_fast32_tX轉換,適當的宏是PRIXFAST32

您可以照常提供任何標志、字段寬度和精度。 如果您確實想使用適合uint_fast32_t實際大小的字段寬度,那么一種合理的方法是利用選項來指定字段寬度作為參數傳遞(類型為int ) . 因此:

uint_fast32_t fast;
// ...
printf("%0*" PRIXFAST32 "\n", (int) sizeof(fast) * 2, fast);

然而,我注意到這似乎有點問題,因為您正在為比通常更廣泛的值做准備,您應該允許該類型的任何值變為。 printf function 在任何情況下都不會打印比表達值所需的更少的數字,假設它確實是指定的類型,所以我傾向於簡單地使用一個足以容納 32 位整數的固定字段寬度(比如 8 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM