情况是这样的:
   现有原始数据"$FF, $D8"这样的十六进制的数据(两个字节), 首先通过
MultiByteToWideChar()函数转换, 然后再通过WideCharToMultiByte()转回来,
结果发现转回来的数据不同于原始数据了, 就想问,这到底是怎么回事儿,
有没有正确的例子给我看看.
  如下是我的错误做法: { 以下均忽略语法错误 }
var
  wsData: WideString;
  EleCount: Integer;
const
  aByte: array [0..1] of Byte = ($FF, $D8);
begin  
  EleCount := SizeOf (aByte);
  SetLength (wsData, EleCount);
  MultiByteToWideChar (CP_ACP, MB_PRECOMPOSED, aByte, EleCount, 
      PWideChar (wsData), EleCount);
end; //------------var
  wsData: WideString;
  EleCount: Integer;
  pByte: array [0..9] of Byte;
begin
  WideCharToMultiByte (CP_ACP, WC_COMPOSITECHECK, PWideChar (wsData),
      EleCount, pByte, EleCount, nil, nil);
end;

解决方案 »

  1.   

    我发现十六进制值只能转到“$80”,也就是ASCII的最后一个。
    有没有人能回答我的问题啊,怎么将大于$80的值转换成WideChar(宽字节)啊
      

  2.   

    我就不信没人遇到过这个问题, 通常我们只是转换ASCII码的字符串数据,
    但有些情况下, 那些数据并不都是ASCII码的啊! 例如, 二进制文件(EXE,DLL等等)
    还有图像文件(BMP,JPEG等等), 绝对能碰到大于0x80的情况,那么我就想
    问了,怎样才能将这些数据也转成宽字节呢??