C/C++ 中的整数到十六进制的两位数
Integer to two digit Hexadecimal in C/C++
我有一个十六进制字节数组
byte hex= {0xAA, 0x55, 0x00, 0x00}
我也有一个整数值可以说
int val= 10;
现在我想将整数值转换为4位十六进制值,如0x000A,并将其分别存储在前2位和后2位的hex[3]和hex[2]中。
例如:
int val=10;
//in hex val=0x000A
msb= 0x00;
lsb= 0x0A;
hex[3]= msb;
hex[2]= lsb;
//so my final hex array will be
hex[]={0xAA, 0x55, 0x0A, 0x00}
//here is another example:
int val=300;
//in hex val=0x012C
msb= 0x01;
lsb= 0x2C;
hex[3]= msb;
hex[2]= lsb;
//so my final hex array will be
hex[]={0xAA, 0x55, 0x2C, 0x01}
如何用 C 或 C++ 实现?
提前致谢。
简单
int val = 10;
int msb = val/256;
int lsb = val%256;
hex[3] = msb;
hex[2] = lsb;
不适用于负整数或超过 16 位有效位的整数。但我想你不关心这个。
你的问题暗示你有一个常见的新手误解,即十六进制整数和十进制整数之间存在一些根本区别。没有,所有整数都属于同一类型(通常是二进制)。十进制和十六进制只是 打印 整数的不同方式,而不是 C++ 语言 表示 整数的不同方式。
看起来你正在处理这里的字节序。 union 可能有帮助
#include <iostream>
union U {
uint32_t val;
uint8_t hex[4];
};
int main() {
U u{0x12345678};
std::cout << std::hex << u.val << std::endl;
for (const auto h : u.hex) {
std::cout << std::hex << static_cast<uint32_t>(h) << std::endl;
}
}
我有一个十六进制字节数组
byte hex= {0xAA, 0x55, 0x00, 0x00}
我也有一个整数值可以说
int val= 10;
现在我想将整数值转换为4位十六进制值,如0x000A,并将其分别存储在前2位和后2位的hex[3]和hex[2]中。
例如:
int val=10;
//in hex val=0x000A
msb= 0x00;
lsb= 0x0A;
hex[3]= msb;
hex[2]= lsb;
//so my final hex array will be
hex[]={0xAA, 0x55, 0x0A, 0x00}
//here is another example:
int val=300;
//in hex val=0x012C
msb= 0x01;
lsb= 0x2C;
hex[3]= msb;
hex[2]= lsb;
//so my final hex array will be
hex[]={0xAA, 0x55, 0x2C, 0x01}
如何用 C 或 C++ 实现? 提前致谢。
简单
int val = 10;
int msb = val/256;
int lsb = val%256;
hex[3] = msb;
hex[2] = lsb;
不适用于负整数或超过 16 位有效位的整数。但我想你不关心这个。
你的问题暗示你有一个常见的新手误解,即十六进制整数和十进制整数之间存在一些根本区别。没有,所有整数都属于同一类型(通常是二进制)。十进制和十六进制只是 打印 整数的不同方式,而不是 C++ 语言 表示 整数的不同方式。
看起来你正在处理这里的字节序。 union 可能有帮助
#include <iostream>
union U {
uint32_t val;
uint8_t hex[4];
};
int main() {
U u{0x12345678};
std::cout << std::hex << u.val << std::endl;
for (const auto h : u.hex) {
std::cout << std::hex << static_cast<uint32_t>(h) << std::endl;
}
}