在无符号字符的 std::vector 处存储 int 的十六进制表示
Posted
技术标签:
【中文标题】在无符号字符的 std::vector 处存储 int 的十六进制表示【英文标题】:Storing hexadecimal representation of int at std::vector of unsigned char 【发布时间】:2020-07-06 00:33:01 【问题描述】:在这段代码中:
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] );
【问题讨论】:
【参考方案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
【讨论】:
我不需要显示值(使用cout
);我有一个带有int
和string
类型元素的结构(示例显示int
元素,string
已经是十六进制表示)并且需要生成一个无符号字符向量作为该方法的返回值。
@KleberMota 那么为什么您的问题会显示完全不同的内容?请edit您的问题与您实际拥有的代码以及您实际想要做的事情。在您的问题中,您没有提到现有的string
字符串在这里不相关,我只想将int
转换为其十六进制表示。问题中的代码是我现在正在使用的,并且想要调整以获得所需的结果。
你想如何存储它? (什么类型的?)
就像问题中的代码所示,我将每个字符推送到向量result
。以上是关于在无符号字符的 std::vector 处存储 int 的十六进制表示的主要内容,如果未能解决你的问题,请参考以下文章
仅在发布模式下将 __m256i 存储在 std::vector 中会产生访问冲突[重复]
奇怪的 std::vector::reverse_iterator 和字符串行为