[英]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
),添加 integer 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
和 integer 演员表:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.