string、 int、byte、十六进制的转换(二)
一、 将vecByte类型转换成string类型:BYTE—>十六进制字符串
#include
#include
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
如果是vector
两种转换方式:
vector
第一种:
vector
vecBuffer.resize(vecbBuffer.size());
std::copy(vecbBuffer.begin(), vecbBuffer.end(), vecBuffer.begin());
第二种:
char* pBuffer = &vecbBuffer[0];
vector
二、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表示一共转换了多少位的字符
三、//将char*的数据转换成vecByte类型(vector
//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
转载于//www.cnblogs.com/nanzhi/p/8417601.html
还没有评论,来说两句吧...