在这段代码中:
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 之外的大多数值(十六进制表示形式保留一个数字和一个空格:"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