从char(unsigned char)数组拷贝至string的方法

本文最后更新于:2022年6月8日 晚上

标准

C++标准 https://en.cppreference.com/w/cpp/string/basic_string/basic_string 中第4条,构造时传入char *指针和待传入的数据长度

basic_string( const CharT* s, size_type count, const Allocator& alloc = Allocator() );

示例

1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>

int main(){
uint8_t a[] = {0x30,0x31,0x33,0x35,0x0,0x30,0x31,0x33,0x35,0x0,0x30,0x31,0x33,0x35,0x0,0x30,0x31,0x33,0x35,0x0,};
std::string s(reinterpret_cast<char *>(a), sizeof(a));
std::cout << "size:"<<s.size()<<std::endl;

return 0;
}
1
2
3
$ g++ main.cpp -std=c++11 -g
$ ./a.out
size:20

在c++11中,可以通过string的构造函数 basic_string( const CharT* s, size_type count, const Allocator& alloc = Allocator() );

完成char *到string的转化,不用管char 数组中是否含有0,可通过 .size() 查看大小,或者直接 使用 gdb 查看内存中的数据;但需注意,直接使用std::cout输出可能会丢失数据(遇\0结束),建议使用迭代器对每个元素遍历。

如上图中终端输出的 使用x 命令访问 内存,格式如 x/<n/f/u> <addr>,

  • n 正整数,表示需要显示的内存单元的个数,即从当前地址向后显示n个内存单元的内容

  • f 表示addr 指向内存内容的输出格式,s对应输出字符串,其它整形格式如下:

    • x 按十六进制格式显示变量
    • d 按十进制格式显示变量
    • u 按十进制格式显示无符号整型
    • o 按八进制格式显示变量
    • t 按二进制格式显示变量
    • a 按十六进制格式显示变量
    • c 按字符格式显示变量
    • f 按浮点数格式显示变量
  • u 指以多少个字节作为一个内存单元-unit,默认为4。u还可以用被一些字符表示:如b=1 byte, h=2 bytes,w=4 bytes,g=8 bytes.


从char(unsigned char)数组拷贝至string的方法
https://www.glj0.top/posts/d8f56567/
作者
gong lj
发布于
2022年3月10日
更新于
2022年6月8日
许可协议