如何将整数向量转换为 2 位十六进制并按顺序添加到 c 字符串?

How to convert a vector of ints to a 2-digit hexadecimal and add sequentially to c string?

本文关键字:顺序 添加 字符串 十六进制 整数 向量 转换      更新时间:2023-10-16

我想接受一个uint8_t vector到一个函数中,然后将每个元素转换为存储在字符串中的 2 位(所有未使用的数字都是 0)十六进制。我想我可能会在这里感到困惑...

我想到了一种使用 printf 的方法(我认为):

std::vector<uint8_t> name1 = { 's', '2', '9', '2', 'a', 'b' };
for (int i = 0; i < name1.size(); i++) {
printf("printf: %002X ", name1[i]);
std::cout << std::endl;
}

但是这个想法是我创建一个字符串,例如:

MSGPACK 733239326162

其中 73 是 s,32 是 2 显然等等......

所以我想把上面的味精包...162 变成一个存储它的变量,然后做类似printf(msgpack1)的事情。

我尝试了以下方法...

char buffer[40];
std::vector<uint8_t> name1 = { 's', '2', '9', '2', 'a', 'b' };
for (int i = 0; i < name1.size(); i++) {
snprintf(buffer, sizeof(buffer), "%002X", name1[i]);
}
buffer[name1.size()] = '';

所以我希望我能像这样打印出来:

printf("MSGPACK %s", buffer);

我不确定我在这里做错了什么,但我得到了MSGPACK 62作为输出。如何获得我需要的东西?

编辑:我看到缓冲区现在被矢量的最后一个成员覆盖,但我不能只buffer[i]放入snprintf,那么有什么方法呢?

std::vector<uint8_t> name1 = { 's', '2', '9', '2', 'a', 'b' };
int buffsize = name1.size()*2+1;
char buffer[buffsize];
int retvalue = 0;
for (int i = 0; i < name1.size()*2 && retvalue >= 0 && retvalue < buffsize; i++) {
retvalue = snprintf(buffer+2*i, sizeof(buffer)-2*i, "%002X", name1[i]);
}
buffer[buffsize-1] = '';
printf("MSGPACK %s", buffer);

输出:

MSGPACK 733239326162