簡體   English   中英

如何將 uint32_t 數字轉換為 char[8]?

[英]How to convert uint32_t number to char[8]?

假設我們有一個string s = "453acd0f" 現在我想做這樣的事情:

uint32_t res = 0;
for (size_t i = 0; i < 8; ++i) {
    res |= ConvertCharToHexNumber(s[8 - i - 1]) << (i * 4);
}

但是,如果我有一個從二進制文件中讀取的uint32_t var變量,我應該怎么做呢?

我相信 iomanip 和 stream 操作可能會對您有所幫助。

#include <sstream>
#include <iomanip>


std::string s="453acd0f";
std::stringstream ss(s);
uint32_t res;
ss >> std::setbase(16) >> res;    // hex. string to int. res==1161481487

ss.str(string());
ss.clear();
s.clear();

ss << std::setbase(16) <<res;    // dec. int to hex. string.
s = ss.str();    // s==453acd0f

將 4 字節uint32_t轉換為char[8]的最簡單方法:

    uint32_t var = 100;
    char res[8]{};
    res[0] = (var >> 28) & 0XF;
    res[1] = (var >> 24) & 0XF;
    res[2] = (var >> 20) & 0XF;
    res[3] = (var >> 16) & 0XF;
    res[4] = (var >> 12) & 0XF;
    res[5] = (var >> 8)  & 0XF;
    res[6] = (var >> 4)  & 0XF;
    res[7] = (var >> 0)  & 0XF;

您可以將其簡化為循環:

    int shiftby = 32;
    for (int i = 0; i < 8; i++) {
        res[i] = (var >> (shiftby -= 4)) & 0xF;
    }

如果從二進制文件中讀取的 uint32 實際上是 uint32,那么除了被解釋為無符號 32 位 integer 之外,它沒有任何格式。 在這種情況下,您讀取數字,然后將其轉換為十六進制表示。

例如:

std::ifstream ifs("file.dat", ios_base::binary);

char buffer[64];
uint32_t n;

ifs.read(buffer, sizeof(uint32_t));
memcpy(&n, buffer, sizeof(uint32_t));

std::cout << std::hex << n << endl;

在這里給貓剝皮的方法不止一種。 你可以直接閱讀:

uint32_t n = 0xABC123;

// Get string representation of n
std::stringstream ss;
ss << std::hex << n;

// Pull out string, copy ptr to char array if you like
std::string s = ss.str();

// s.c_str() for example, for the C style string
std::cout << s << std::endl;

我希望能回答這個問題,如果它將 uint32_t 讀取為 4 個字節,然后顯示或保存 char* 字符串十六進制表示。

暫無
暫無

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

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