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

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

#include <iomanip>

#include <sstream>

   

vecByte vecbuffer(chbuffer, chbuffer+n);            

     stringstream sStream;       //用于类型转换

    std::string sBuffer = "";   //将接收到的十六进制数据转换为string保存其中

    std::cout << "接收到数据: " << endl;

    for (size_t i = 0; i < bytes_transferred; i++)

    {

         int nByte = static_cast<int>(vecbuffer[i]); //下面的stream转换操作对byte类型无效,所有需要先转换为int型

         sStream.clear(); //清空状态

         sStream.str(""); //清空缓存内容

         sStream << std::hex << std::setw(2) << std::setfill('0') << std::uppercase << nByte; //将这个字节转换为十六进制字符串

         sBuffer += sStream.str();  //null

    }

 

 

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

 

如果是vector<char>类型,需要先转换成vector<unsinged char> 类型:

 

两种转换方式:

vector<char> vecbBuffer;

第一种:

vector<unsigned char > vecBuffer;

vecBuffer.resize(vecbBuffer.size());

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

第二种:

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

 

 

  

 二、itoa与sprintf

例子1:

       char buf[3];

        int n = 100;

        itoa(n, buf, 16);//转换为是小写16进制,

        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. " ,
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;
 }
}

常见格式串:

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

        

  

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

    //unsigned char* d =  const_cast<unsigned char*>(m_readBuffer1.Peek());

    const char * chData = m_readBuffer1.Peek();

    size_type n = m_readBuffer1.Size();

    unsigned char* chbuffer = (unsigned char*)chData;

    vecByte vecbuffer(chbuffer, chbuffer+n);

四、将CString转换成String

USES_CONVERSION;

    CString temp = CSqlConverter::ToString(vsValue);

    //temp = _T("kjdsaflkjdlfkj");

    char* s_char = W2A(temp);

    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