标签:span string ges 参数 c_str 设置 创建 substr 内存数据
空间分配方式:
string 在构建实例时默认分配8字节空间(和g++编译环境有关,一般是8字节),在后面的数据操作时,当字节长度超过当前分配空间时,会以2倍的空间重新分配一块新的内存,该分配策略和vector相似,当前内存后边有足够的空间,就在当前内存后追加内存,如果不够就重新分配一块大的内存,把当前的字符串拷贝到新内存块中,释放原来的内存块。
使用注意点:
内存数据与二进制字符串互相转化
#include <iostream> #include <string> using namespace std; //内存数据转二进制字符串 string buf2bit(void* addr, size_t size) { char *paddr = (char*)addr; string str = ""; for(int i = 0; i < size; i++) { bitset<8> b(*paddr); str += b.to_string(); paddr++; } return str; } //二进制字符串转内存数据 void bit2buf(void* addr, const string& str) { char *paddr = (char*)addr; for(int i = 0; i < str.size(); i+=8) { bitset<8> bit(str.substr(i, 8)); char b = (char)bit.to_ulong(); memcpy(paddr, &b, sizeof(char)); paddr++; } } //根据二进制字符串获取内存数据大小 int getSizeByBit(const string& str) { return str.size()/8; }
内存数据与16进制进制字符串互相转化
#include <string.h> #include <string> #include <sstream> #include <iomanip> using namespace std; //内存数据转16进制字符串 string buf2hex(void* addr, size_t size) { char *paddr = (char*)addr; string str; stringstream stream; for(int i = 0; i < size; i++) { int n = (int)*paddr; n &= 0xff; stream<<setfill(‘0‘)<<setw(2)<<hex<<n; paddr++; } stream>>str; return str; } //16进制字符串转内存数据 void hex2buf(void* addr, const string& str) { char *paddr = (char*)addr; for(int i = 0; i < str.size(); i+=2) { char b = (char)strtol(str.substr(i,2).c_str(),NULL, 16); memcpy(paddr, &b, sizeof(char)); paddr++; } } //根据16进制字符串获取内存数据大小 int getSizeByHex(const string& str) { return str.size()/2; }
数字字符串到数字的相互转换
#include <string.h> #include <string> #include <sstream> using namespace std; //数字转字符串 template<typename T> string digit2string(const T& t) { static stringstream ss; ss.clear(); ss<<t; //double 转换到string后,精度只有6位,和float相同 return ss.str(); } template<> string digit2string<double>(const double& t) { char buf[128] = {‘\0‘}; sprintf(buf, "%.15g", t); return string(buf); } //字符串转数字 template<typename T> T string2digit(const string& str) { static stringstream ss; T t; ss.clear(); ss<<str; ss>>t; return t; }
合并多个空格到一个空格
#include <string> #include <algorithm> using namespace std; struct AreBothSpaces { bool operator () (char c1, char c2) { return c1 == ‘ ‘ && c2 == ‘ ‘; } }; //采用std::unique实现字符串多个空格合并到一个空格的方式 void mergeSpaces(string& str) { string::iterator it = unique(str.begin(), str.end(), AreBothSpaces()); str.erase(it, str.end()); }
标签:span string ges 参数 c_str 设置 创建 substr 内存数据
原文地址:https://www.cnblogs.com/lwp-boy/p/13173615.html