如何将 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 和流操作可以帮到你。
#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 位整数之外,它不是任何格式。在这种情况下,您读入数字然后将其转换为十六进制表示形式。
例如:
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* 字符串十六进制表示。
假设我们有一个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 和流操作可以帮到你。
#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 位整数之外,它不是任何格式。在这种情况下,您读入数字然后将其转换为十六进制表示形式。
例如:
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* 字符串十六进制表示。