string、 int、byte、十六進制的轉換(二)

 

1、 將vecByte類型轉換成string類型:BYTE-->十六進制字符串html

#include <iomanip>c++

#include <sstream>緩存

   

vecByte vecbuffer(chbuffer, chbuffer+n);            函數

     stringstream sStream;       //用於類型轉換spa

    std::string sBuffer = "";   //將接收到的十六進制數據轉換爲string保存其中orm

    std::cout << "接收到數據: " << endl;htm

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

    {ip

         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());

 

 

  

 2、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. \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;
 }
}

 

常見格式串:

       %% 印出百分比符號,不轉換。
  %c 整數轉成對應的 ASCII 字元。
  %d 整數轉成十進位。
  %f 倍精確度數字轉成浮點數。
  %o 整數轉成八進位。
  %s 整數轉成字符串。
  %x 整數轉成小寫十六進位。
  %X 整數轉成大寫十六進位。
  %n sscanf(str, "%d%n", &dig, &n),%n表示一共轉換了多少位的字符

 

 

 

 

        

  

3、//將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);

 

4、將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

相關文章
相關標籤/搜索