string、 int、byte、十六进制的转换(二)

深碍√TFBOYSˉ_ 2021-09-30 08:40 667阅读 0赞

一、 将vecByte类型转换成string类型:BYTE—>十六进制字符串

#include

#include

vecByte vecbuffer(chbuffer, chbuffer+n);

  1. *stringstream* sStream; //用于类型转换
  2. std::*string* sBuffer = ""; //将接收到的十六进制数据转换为string保存其中
  3. std::*cout* << "接收到数据: " << *endl*;
  4. for (*size\_t* i = 0; i < bytes\_transferred; i++)
  5. \{
  6. int nByte = static\_cast<int>(vecbuffer\[i\]); //下面的stream转换操作对byte类型无效,所有需要先转换为int型
  7. sStream.*clear*(); //清空状态
  8. sStream.*str*(""); //清空缓存内容
  9. sStream << std::*hex* << std::*setw*(2) << std::*setfill*('0') << std::*uppercase* << nByte; //将这个字节转换为十六进制字符串
  10. sBuffer += sStream.*str*(); //null
  11. \}

注意:上面的vecbuffer的类型必须是vector 或者vector 类型,如果不是,有些转换会不正确。

如果是vector类型,需要先转换成vector 类型:

两种转换方式:

vector vecbBuffer;

第一种:

vector vecBuffer;

vecBuffer.resize(vecbBuffer.size());

std::copy(vecbBuffer.begin(), vecbBuffer.end(), vecBuffer.begin());

第二种:

char* pBuffer = &vecbBuffer[0];
vector vecBuffer2(pBuffer, pBuffer+vecbBuffer.size());

二、itoa与sprintf

例子1:

  1. char buf\[3\];
  2. int n = 100;
  3. itoa(n, buf, 16);//转换为是小写16进制,
  4. transform(buf, buf + strlen(buf), buf, toupper);//转大写

例子2:

nt num = 100;
char str[25];
itoa(num, str, 10);
printf(“The number ‘num’ is %d and the string ‘str’ is %s. \n” ,
num, str);

例子3:

char str[255];

sprintf(str, “%x”, 100); //将100转为16进制表示的字符串。

itoa()函数有3个参数:第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转移数字时所用 的基数。在上例中,转换基数为10。10:十进制;2:二进制…

itoa并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。是Windows平台下扩展的,标准库中有sprintf,功能比这个更强,用法跟printf类似。

void ConverToHexString(string& strHexData, const char* pszSrc, int nLen)
{
for (int i = 0; i < nLen; i++)
{
char szBuf[3] = {0};
sprintf(szBuf, “%02X”, (unsigned char)pszSrc[i]);
strHexData += szBuf;
}
}

常见格式串:

  1. %% 印出百分比符号,不转换。

  %c 整数转成对应的 ASCII 字元。
  %d 整数转成十进位。
  %f 倍精确度数字转成浮点数。
  %o 整数转成八进位。
  %s 整数转成字符串。
  %x 整数转成小写十六进位。
  %X 整数转成大写十六进位。
  %n sscanf(str, “%d%n”, &dig, &n),%n表示一共转换了多少位的字符

三、//将char*的数据转换成vecByte类型(vector

  1. //unsigned char\* d = const\_cast<unsigned char\*>(m\_readBuffer1.Peek());
  2. const char \* chData = m\_readBuffer1.Peek();
  3. *size\_type* n = m\_readBuffer1.Size();
  4. unsigned char\* chbuffer = (unsigned char\*)chData;
  5. vecByte vecbuffer(chbuffer, chbuffer+n);

四、将CString转换成String

USES_CONVERSION;

  1. *CString* temp = CSqlConverter::ToString(vsValue);
  2. //temp = \_T("kjdsaflkjdlfkj");
  3. char\* s\_char = *W2A*(temp);
  4. std::*string* *str* = s\_char;

更好的方法:先将CString转char *,然后将char* 直接赋值给string

CString转char *

CString cstr;

char *p =(LPSTR)(LPCTSTR)cstr;

参考文章:

c++按位操作与各种输出格式化:

  • Zhuang miao - 博客园 http://www.cnblogs.com/mz121star/archive/2008/05/24/bit.html

    扩展:

C++的cout高阶格式化操作 - Devymex - 博客园 http://www.cnblogs.com/devymex/archive/2010/09/06/1818754.html

转载于:https://www.cnblogs.com/nanzhi/p/8417601.html

发表评论

表情:
评论列表 (有 0 条评论,667人围观)

还没有评论,来说两句吧...

相关阅读