在 unsigned char 的 std::vector 处存储 int 的十六进制表示
Storing hexadecimal representation of int at std::vector of unsigned char
在此代码中:
vector<unsigned char> result;
int n;
unsigned char c;
c = (n >> 24) & 0xFF;
result.push_back(c);
c = (n >> 16) & 0xFF;
result.push_back(c);
c = (n >> 8) & 0xFF;
result.push_back(c);
c = n & 0xFF;
result.push_back(c);
我想要,而不是将一个字节添加到向量 (c
),添加整数 n
的十六进制表示的每一位(例如 FF
之类的东西0xFF
).
任何人都可以提示如何完成它?
更新
我将我的代码更新为这个,它适用于除 0 和 1 之外的大多数值(十六进制表示保留一位和一位 space:“0”和“1”)。
BYTE c;
vector<BYTE> v_version;
c = (version >> 24) & 0xFF;
v_version.push_back(c);
c = (version >> 16) & 0xFF;
v_version.push_back(c);
c = (version >> 8) & 0xFF;
v_version.push_back(c);
c = version & 0xFF;
v_version.push_back(c);
for (auto c: v_version)
{
ostringstream oss;
oss << hex << static_cast<int>(c);
result.push_back( oss.str()[0] );
result.push_back( oss.str()[1] );
}
n
未初始化,因此请先处理它。
根据您的最终目标,最好的解决方案不是存储十六进制数字,而是保留当前的二进制表示形式并以十六进制打印。为此,您需要 std::hex
和一个整数转换:
std::cout << std::hex << std::setw(2) << std::setfill('0');
std::cout << static_cast<unsigned>(c);
如果您想存储结果而不是打印结果,您可以像示例中那样使用 ostringstream
来完成。但我强烈建议 std::string
或 std::vector<char>
。尽管它的名字 unsigned char
不应该与字符一起使用。如果你有像这里这样的字符,底层类型应该是 char
.
- 对字符使用
char
- 使用
unsigned char
作为原始内存(字节)
- 不要使用
signed char
在此代码中:
vector<unsigned char> result;
int n;
unsigned char c;
c = (n >> 24) & 0xFF;
result.push_back(c);
c = (n >> 16) & 0xFF;
result.push_back(c);
c = (n >> 8) & 0xFF;
result.push_back(c);
c = n & 0xFF;
result.push_back(c);
我想要,而不是将一个字节添加到向量 (c
),添加整数 n
的十六进制表示的每一位(例如 FF
之类的东西0xFF
).
任何人都可以提示如何完成它?
更新
我将我的代码更新为这个,它适用于除 0 和 1 之外的大多数值(十六进制表示保留一位和一位 space:“0”和“1”)。
BYTE c;
vector<BYTE> v_version;
c = (version >> 24) & 0xFF;
v_version.push_back(c);
c = (version >> 16) & 0xFF;
v_version.push_back(c);
c = (version >> 8) & 0xFF;
v_version.push_back(c);
c = version & 0xFF;
v_version.push_back(c);
for (auto c: v_version)
{
ostringstream oss;
oss << hex << static_cast<int>(c);
result.push_back( oss.str()[0] );
result.push_back( oss.str()[1] );
}
n
未初始化,因此请先处理它。
根据您的最终目标,最好的解决方案不是存储十六进制数字,而是保留当前的二进制表示形式并以十六进制打印。为此,您需要 std::hex
和一个整数转换:
std::cout << std::hex << std::setw(2) << std::setfill('0');
std::cout << static_cast<unsigned>(c);
如果您想存储结果而不是打印结果,您可以像示例中那样使用 ostringstream
来完成。但我强烈建议 std::string
或 std::vector<char>
。尽管它的名字 unsigned char
不应该与字符一起使用。如果你有像这里这样的字符,底层类型应该是 char
.
- 对字符使用
char
- 使用
unsigned char
作为原始内存(字节) - 不要使用
signed char