当前位置: 首页 > 工具软件 > ipos > 使用案例 >

将从iPos位置开始的2个字节合并成1个,在CString中显示

万俟炯
2023-12-01

方法1:

void MergeTwoCharToShow(char* pData, int& iPos, CString& csCur)
{
int iCur;
int iCurH;
int iCurL;
char szCur[8];
iCurH = (unsigned char)pData[iPos];
iCurL = (unsigned char)pData[iPos + 1];
iCur  = (iCurH << 8) + iCurL;
iPos +=2;
itoa(iCur, szCur, 10); //按10进制转换
csCur = szCur;
}


方法2:

void MergeTwoCharToShow(char* pData, int& iPos, CString& csCur)
{
int iCur;
int iCurH;
int iCurL;
char szCur[8];
iCurH = (unsigned char)pData[iPos];
iCurL = (unsigned char)pData[iPos + 1];
iCur  = (iCurH << 8) + iCurL;
iPos +=2;
_itoa_s(iCur, szCur, 10, 10); //按10进制转换
csCur = szCur;
}


方法3:

void MergeTwoCharToShow(char* pData, int& iPos, CString& csCur)
{
int iCur;
int iCurH;
int iCurL;
char szCur[8];
iCurH = (unsigned char)pData[iPos];
iCurL = (unsigned char)pData[iPos + 1];
iCur  = (iCurH << 8) + iCurL;
iPos +=2;
sprintf_s(szCur, sizeof(szCur), "%d", iCur); //按10进制转换
csCur = szCur;
}


方法4:

void MergeTwoCharToShow(char* pData, int& iPos, CString& csCur)
{
int iCur;
int iCurH;
int iCurL;
iCurH = (unsigned char)pData[iPos];
iCurL = (unsigned char)pData[iPos + 1];
iCur  = (iCurH << 8) + iCurL;
iPos +=2;
csCur.Format("%d", iCur); //按10进制转换
}


    在VS2008中的VC项目中,如果直接用itoa这个函数,在编译的时候会有警告说让你用_itoa,然后你用_itoa的时候呢,它又有警告说要用_itoa_s这个函数才行。

    _itoa_s和itoa是有区别的,_itoa_s(int ,char *,int ,int )有四个参数,比itoa的参数个数要多一些,_itoa_s函数的四个参数的意思分别是:
参数1: 要转换的整形变量
参数2: 转换后的字符串
参数3: 第一个参数的进制表示,如十进制,16进制这样的值,
参数4: 转换后的字符串结果数的进制表示,如十进制,16进制这样的值


    这是在VS中的方法,不过还是建议多用标准C++中的函数,这样如果存在代码移植的情况时,需要改动的就小很多了。 然而在实际的应用当中,还是建议大家用sprintf这个函数,在VS中用这个函数会有警告,可以使用sprintf_s函数。用它的好处时,将数字类型的值转为相用的字符串时,可以格式化,即不足位可以自动补0进行占位,而_itoa_s则不会自动进行补位,很多时侯我们是需要固定长度的字符串的,这种情况下_itoa_s就麻烦一些,需要自己另外去补齐,而sprintf这个函数恰恰能自动完成这个过程。


    使用CString来处理字符串是一个很不错的选择。CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的字符串。CString的Format方法给我们进行字符串的转换带来了很大的方便,比如常见的int、float和double这些数字类型转换为CString字符串只需一行代码就可以实现。

  先看看Format用于转换的格式字符:

  %c                 单个字符

  %d                 十进制整数(int)

  %ld                十进制整数(long)

  %f                 十进制浮点数(float)

  %lf                十进制浮点数(double)

  %o                 八进制数

  %s                 字符串

  %u                 无符号十进制数

  %x                 十六进制数

  1、int转换为CString:

  CString str;

  int number=15;

  //str="15"

  str.Format(_T("%d"),number);

  //str=" 15"(前面有两个空格;4表示将占用4位,如果数字超过4位将输出所有数字,不会截断)

  str.Format(_T("%4d"),number);

  //str="0015"(.4表示将占用4位,如果数字超过4位将输出所有数字,不会截断)

  str.Format(_T("%.4d"),number);

  long转换为CString的方法与上面相似,只需要把%d改为%ld就可以了。


  2、double转换为CString:

  CString str;

  double num=1.46;

  //str="1.46"

  str.Format(_T("%lf"),num);

  //str="1.5"(.1表示小数点后留1位,小数点后超过1位则四舍五入)

  str.Format(_T("%.1lf"),num);

  //str="1.4600"

  str.Format(_T("%.4f"),num);

  //str=" 1.4600"(前面有1个空格)

  str.Format(_T("%7.4f"),num);

  float转换为CString的方法也同上面相似,将lf%改为f%就可以了。


  3、将十进制数转换为八进制:

  CString str;

  int num=255;

  //str="377"

  str.Format(_T("%o"),num);

  //str="00000377"

  str.Format(_T("%.8o"),num);


 类似资料: