簡體   English   中英

使用 sprintf 轉換和打印十六進制值(保留前導零)

[英]Converting and printing hex values using sprintf(keeping the leading zeroes)

我有以下 C 代碼,它采用兩個長整數值並使用 sprintf 函數將它們轉換為兩個十六進制字符串:

void reverse_and_encode(FILE *fpt, long *src, long *dst) {
    char reversed_src[5], reversed_dst[5];
    sprintf(reversed_src, "%x", *dst);
    sprintf(reversed_dst, "%x", *src);
    printf("Reversed Source: %s\n", reversed_src);
    printf("Reversed Destination: %s\n", reversed_dst);
}

但是當我打印十六進制值字符串時,我無法在輸出中獲得前導零。 例如。

Reversed Source: f168 // for integer 61800
Reversed Destination: 1bb // This output should be "01bb" for integer 443

sprintf(reversed_src, "%04x", ( unsigned int )*dst);

請注意,對於2 * sizeof( long )類型的對象,如果表達式2 * sizeof( long ) (十六進制數字的數量)可以等於 8 或 16。 所以你需要像這樣聲明數組

char reversed_src[2 * sizeof( long ) + 1], reversed_dst[2 * sizeof( long ) + 2];

然后寫例如

sprintf(reversed_src, "%0*lx", 
        ( int )( 2 * sizeof( long ) ), ( unsigned long )*dst);

這是一個演示程序。

#include <stdio.h>

int main(void) 
{
    enum { N  = 2 * sizeof( long ) };
    char reversed_src [N + 1];

    long x = 0xABCDEF;

    sprintf( reversed_src, "%0*lX", N, ( unsigned long )x );

    puts( reversed_src );
   
    return 0;
}

程序輸出是

0000000000ABCDEF

暫無
暫無

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

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