将有汉字的字符串格式化成某长度的行

//需求:要打印一个char型汉字和字符的混合的字符串,每行打印40个字节,若第40个字符刚好是汉字的第一个字节,则不能在该处截断

//原理:char 字符串中,一个汉字会占两个字节,高位字节和低位字节,高位字节的第一位会是1,即将之转换成16进制,它会>= 0x80

 

 

//以下是代码

 

char szADInfo[1024] = “汉字内容English汉字内容English汉字内容English汉字内容English汉字内容English汉字内容English”;
 char szFormatedAD[1024];
 memset(szFormatedAD, 0, sizeof(szFormatedAD));

 //此处算法防止汉字在第40个时被截断
 int iPos = 0;
 for (int i=0; i<iLen; )
 {
  if(((unsigned char)szADInfo[i] >= 0x80) && (szADInfo[i+1]))
  {
   if ((iPos+1)%40 == 0)
   {
    szFormatedAD[iPos] = ' ';
    ++iPos;
   }
   else
   {
    szFormatedAD[iPos] = szADInfo[i];
    szFormatedAD[iPos+1] = szADInfo[i+1];
    iPos += 2;
    i += 2;
   }
  }
  else
  {
   szFormatedAD[iPos] = szADInfo[i];
   ++iPos;
   ++i;
  } 

}

 

//格式化后的szFormatedAD字符串就可以进行第行40个字符地截断而不会打印出乱码了
//当然,此算法还可以简化,例如利用memcpy功能,只是些处要处理的原始字符串不长,分段也可能40的长度,我就省了点脑细胞~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值