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