这个问题在这里已有答案:
我想接受一个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等...
所以我想把上面的MSGPACK ... 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()] = '\0';
所以我希望我可以像这样打印出来:
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] = '\0';
printf("MSGPACK %s", buffer);
输出:
MSGPACK 733239326162