unicode 版本 delphi (如XE2)的 TBytes 转换为 AnsiString
unicode 版本 delphi (如XE2)的 TBytes 轉換為 AnsiString
在這樣的新版本中如果結果數據會有二進制會使用 TBytes 來操作,而 d7 中基本上就是用 string . 也許是因為新版本 AnsiString 與 string 賦值會丟失數據的原因所以大多數庫都是用的 TBytes 操作二進制包括 delphi 本身和 indy 控件.這就有一個問題 TBytes 怎么轉換成 AnsiString 呢? 不知道標準做法是什么,我是這樣處理的.利用了 AnsiString 的指針就是內容緩沖區這一 hack 特性.當然大家知道標準做法的話還是按標準來的比較好.
?
function Base64ToStr(const Base64: AnsiString): AnsiString;
var
? buf:TBytes;
begin
? //Result := EncdDecd.DecodeString(Base64);Exit;//
? buf := EncdDecd.DecodeBase64(Base64);
? //ShowMessage(PAnsiChar(@buf[0]));
? //BytesToRaw(buf, head, SizeOf(TProtoHead));
? //Result := BytesToString(buf, TIdTextEncoding.ASCII);Exit;//不對,即使是用了 ASCII 仍然進行了轉碼,沒法得到原始數據
? //Result := BytesToString(buf, TIdTextEncoding.UTF8);
? //Result := (PAnsiChar(@buf[0]));
? SetLength(Result, Length(buf));
? //SetAnsiString(@Result, @buf[0], Length(buf));
? //StrLCopy(PAnsiChar(result), @buf[0], Length(buf));//不行會在 #0 時出錯
? CopyMemory(PAnsiChar(result), @buf[0], Length(buf));
end;
總結
以上是生活随笔為你收集整理的unicode 版本 delphi (如XE2)的 TBytes 转换为 AnsiString的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线程池基本理论
- 下一篇: eclipse Indigo Helio