如何将双高/宽字符串转换为普通字符串[VC ++ 6]

时间:2010-05-08 20:18:08

标签: c++ string

我的应用程序通常会收到以下格式的字符串:
   “Item $ 5.69”

我一直期待的一些含量:
  - LENGHT总是20个字符
  - 文本的起始索引始终为[5]
  - 最重要的是DECIMAL的价格指数总是[14]
为了正确识别这个字符串,我验证了上面列出的所有预期含量....

我的一些客户现在已经开始使用Doube-High / Double-Wide值(表示单个可读字符的字符对)发送字符串,类似于以下内容:    “Item $ x80x90.x81x91x82x92”

为了测试,我只是逐个字符地扫描字符串,比较char [i]和char [i + 1],并在找到匹配项(工作正常)时用相应的单个字符替换这些对,如下所示: / p>

[代码]

for (int i=0; i < sData.length(); i++)
{
   char ch = sData[i] & 0xFF;
   char ch2 = sData[i+1] & 0xFF;

   if (ch == '\x80' && ch2 == '\x90')
      zData.replace("\x80\x90", "0");
   else if (ch == '\x81' && ch2 == '\x91')
      zData.replace("\x81\x91", "1");
   else if (ch == '\x82' && ch2 == '\x92')
      zData.replace("\x82\x92", "2");
   ...
   ...
   ...
}

[/代码]

但结果是这样的:
“Item $ 5.69”

注意这不再符合我的期望:由于3次转换,长度现在是17(而不是20),由于之前“5”的转换,小数现在在索引13(而不是14)小数点。

理想情况下,我想将字符串转换为正常的可读格式,将常量(长度,文本索引,十进制索引)保持在同一位置(因此我的应用程序的其余部分可重复使用)...或者任何其他建议(我几乎坚持这个)...有没有一种标准的方式来处理这些类型的字符?

任何帮助都会非常感激,我已经坚持了一段时间了......

谢谢,

1 个答案:

答案 0 :(得分:0)

您需要Unicode Normal Form。尽管是关于VS8的,This Page会帮助你。 NormalizeString API独立于正在使用的Visual Studio版本。