簡體   English   中英

如何從uint32_t打印十六進制?

[英]How to print hex from uint32_t?

我一直在處理的代碼要求我打印一個十六進制的uint32_t類型的變量,填充為0,最小長度為8.到目前為止我用來執行此操作的代碼是:

printf("%08lx\n",read_word(address));

其中read_word返回類型uint32_t。 我使用jx,llx等格式無濟於事,是否有正確的格式可以使用?

編輯:

我發現問題在於我正在經歷的事情。 函數read_word從uint32_t向量返回一個值。 這似乎是導致輸出hex的問題。 這是一個通過引用/值問題傳遞,修復是什么?

read_word函數:

uint32_t memory::read_word (uint32_t address) {
  if(address>(maxWord)){
        return 0;
    }

    return mem[address];

}

記憶減速:

std::vector<uint32_t> mem=decltype(mem)(1024,0);

要在C ++中執行此操作,您需要濫用填充和寬度操縱器:

#include <iostream>
#include <iomanip>
#include <cstdint>

int main()
{
    uint32_t myInt = 123456;
    std::cout << std::setfill('0') << std::setw(8) << std::hex << myInt << '\n';
}

產量

0001e240

對於C來說,它會變得更加遲鈍。 你使用inttypes.h

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>


int main()
{
    uint32_t myInt = 123456;
    printf("%08" PRIx32 "\n", myInt);
    return 0;
}

產量

0001e240

請注意,在C中, inttypes.h中的常量與語言字符串連接功能一起使用,以形成所需的格式說明符。 您只提供零填充和最小長度作為前導碼。

%jx + typecast

我認為這是正確的:

#include <stdio.h>
#include <stdint.h>

int main(void) {
    uint32_t i = 0x123456;
    printf("%08jx\n", (uintmax_t)i);
    return 0;
}

編譯並運行:

gcc -Wall -Wextra -pedantic -std=c99 main.c
./a.out

輸出:

00123456

如果您能夠生成一個失敗的測試用例,請告訴我。

在Ubuntu 16.04,GCC 6.4.0中測試。

暫無
暫無

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

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