[英]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.