CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

Delphi代码翻译成BCB

楼主aniven(Compile Failed)2005-12-20 12:22:15 在 C++ Builder / 基础类 提问

var  
      S:   string;  
      W:   WideString;  
  begin  
      if   not   FileExists('c:\temp\temp.txt')   then   Exit;  
      with   TMemoryStream.Create   do   try  
          LoadFromFile('c:\temp\temp.txt');  
          if   Size   <   4   then   Exit;  
          SetLength(S,   2);  
          Read(S[1],   Length(S));  
          if   Copy(S,   1,   2)   <>   #$FF#$FE   then   Exit;  
          SetLength(W,   (Size   -   2)   div   SizeOf(WideChar));  
          Read(W[1],   Length(S));  
          Memo2.Text   :=   W;  
      finally  
          Free;  
  end; 问题点数:50、回复次数:10Top

1 楼constantine(飘遥的安吉儿)回复于 2005-12-20 12:45:56 得分 20

String   S;  
  WideString   W;  
  TMemoryStream   *ms;  
  if(!FileExists("c:\\temp\\temp.txt"))   return;  
    ms=new   TMemoryStream();  
    try  
    {  
          ms->LoadFromFile("c:\\temp\\temp.txt");  
          if(   ms->Size   <   4   )   return;  
          S.SetLength(2);  
          ms->Read(S.c_str(),S.Length());  
          if((S.SubString(1,2))!=String(0xFF)+String(0xFE))   return;  
          W.SetLength((ms->Size   -   2)   /   sizeof(WideChar));  
          ms->Read(W.c_bstr(),   S.Length());  
          Memo2->Text   =   W;  
    }  
    __finally  
    {  
          delete   ms;  
    }  
   
  //#$FF#$FE   这个东西是什么,不知道我表达的对不对Top

2 楼aniven(Compile Failed)回复于 2005-12-20 13:20:25 得分 0

我也是不明白这个,这个代码是加载Unicode文本到Memo中,编译是通过了,但是结果是乱码!Top

3 楼CityHost(市长)回复于 2005-12-20 14:36:05 得分 10

如果这样的话,那我以后要直接把D的编译成DCU,看看行不行Top

4 楼aniven(Compile Failed)回复于 2005-12-20 14:36:47 得分 0

应该是   char   S[]={0xFF,0xFE};Top

5 楼ccrun(老妖)(www.ccrun.com)回复于 2005-12-20 14:39:29 得分 5

一样的。简单点说就是组成一个字符串,前一个字节是0xFF,后一个字节是0xFE,是Unicode编码的标志。Top

6 楼constantine(飘遥的安吉儿)回复于 2005-12-20 15:36:20 得分 5

你试过delphi的代码没有?Top

7 楼PPower(月亮光光,照地堂)回复于 2005-12-20 16:32:42 得分 5

if   Copy(S,   1,   2)   <>   #$FF#$FE     then   exit   ;    
  //$FF   即   255   #$FF   即#255   ;   $前置符為16進制數字標志,#是字符轉義符  
  可翻譯為:  
  if(S[1]   !=   0xFF   ||   S[2]   !=   0xFE)   return   ;    
   
  翻譯成:   String(0xFF)+String(0xFE)   //這是錯誤的。這句的結果是:255254  
  如果要翻譯成字符串可這樣:   "\0xff\0xfe"    
  Top

8 楼xili()回复于 2005-12-20 19:13:20 得分 5

用   memo   显示   unicode   肯定乱码,   用TnT吧.  
   
  这段   delphi的代码很有意思,   转了个很大的弯.  
  它其实是想说   if(   W[0]   !=   0xfeff   )   exit  
  我不太了解   delphi,   难道没有   wchar_t   类型?  
   
  0xfeff   是   unicode   保存文本的   约定.   应该是对应   utf16吧.  
   
  Top

9 楼xili()回复于 2005-12-20 19:16:54 得分 0

哦,   可能是因为   TMemoryStream   是单字节类型,所以绕弯了.Top

10 楼aniven(Compile Failed)回复于 2005-12-22 15:04:00 得分 0

已经成了,用的是char   S[]={0xFF,0xFE};  
  "\0xff\0xfe"不知道行不行Top

相关问题

  • 急用,谁能把下面的delphi代码翻译成bcb代码?
  • 请帮忙翻译下面的代码(delphi->bcb)
  • bcb代码转delphi
  • 将一个C++代码翻译成delphi代码。
  • 一段VB代码,帮我翻译成Delphi代码,谢谢!!
  • 请翻译如下C代码至Delphi代码,感谢!
  • 谁能把下面的Delphi代码翻译成VB代码?
  • VB到BCB代码的翻译
  • 有谁会把下面的VB源代码翻译成Delphi的源代码?
  • 帮帮忙把这段delphi代码翻译成c++builder

关键词

  • 代码
  • delphi
  • unicode
  • xfe
  • tmemorystream
  • xff
  • memo
  • 翻譯
  • ms
  • temp

得分解答快速导航

  • 帖主:aniven
  • constantine
  • CityHost
  • ccrun
  • constantine
  • PPower
  • xili

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo