如何将整数向量转换为 2 位十六进制并按顺序添加到 c 字符串?
How to convert a vector of ints to a 2-digit hexadecimal and add sequentially to c string?
我想接受一个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
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- CMake-按正确顺序将项目与C运行时对象文件链接
- 函数调用中参数的顺序重要吗
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 试图添加两个矢量,但添加顺序错误
- 编写链接函数的更短/更有效的方法,该函数按字典顺序添加新元素
- 添加字符串和文字,顺序如何影响是否可以正确添加字符串
- C++静态初始化顺序:添加到映射中
- 如何将整数向量转换为 2 位十六进制并按顺序添加到 c 字符串?
- 在c++中按字母顺序将节点添加到链表中
- 双向循环列表中的赋值运算符以错误的顺序添加元素
- 如何在两个数组中添加元素,但顺序相反
- C++:为什么返回false的集合顺序的函子只允许向集合中添加一个元素
- 如果向量<int>按顺序添加到向量中,我是否需要对向量进行排序?
- 如何使用双向搜索按字母顺序将随机字符串添加到数组中
- c++按字母顺序向列表中添加元素
- 递归-按顺序向列表中添加树数据
- 我的图标被添加到系统托盘的顺序
- 为了得到最精确的结果,应该按哪个顺序添加浮点数