delphi代码转C#代码中的问题

agully 2014-09-02 05:13:19
我在对一个delphi的函数进行转换成C#的处理中,运行没问题,但是返回值不一样,delphi的代码是在delphi7下编译的,代码如下:
function Enc(sInput: string): string;stdcall;
Const
AllChar:string='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ';
Var
sOutput :string;
iPin:byte;
A: Boolean;
begin
Result := '';
if sInput = '' Then
sOutput := ''
else
begin
A := False;
if Length(sInput) Mod 2 = 1 then
begin
A := True;
sInput := sInput + '_';
end;
for iPin:=1 to Length(sInput) do
begin
sOutput := sOutput+Char(Ord(sInput[iPin]) + 128);
end;
if A then sOutput := sOutput + '_';
end;
Result := PChar(Trim(sOutput));
end;
,我转换成C#,是这样写的:
public string Enc(string sInput)
{
string AllChar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
string sOutput;
byte iPin;
Boolean A;
int len = 0;
Int32 K = 0;
sOutput = "";
if (sInput == "") sOutput = "";
else
{
A = false;
len = sInput.Length;
if (len % 2 == 1)
{
A = true;
sInput = sInput + "_";
}
for (iPin = 0; iPin < len; iPin++)
{
K = Convert.ToInt32(sInput[iPin]);
sOutput = sOutput + (char)(Convert.ToInt32(sInput[iPin])+128);
}
if (A == true)
{
sOutput = sOutput + "_";
}
}
return sOutput;
}

运行是没有问题,但是执行结果不一样,在delphi下,字符串“淤釉磐”的执行结果是“SYSTEM”,可是在C#下就不行,delphi7下是采用ANSI码,而C#中是采用UniCode编码,不知道是不是这个问题,但是一直解决不了,期望大能解惑,谢谢
...全文
127 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunny906 2014-09-03
  • 打赏
  • 举报
回复
引用 7 楼 bdmh 的回复:
c#改成如下

        public string Enc(string sInput)
        {
            string AllChar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            string sOutput;
            byte iPin;
            Boolean A;
            int len = 0;
            Int32 K = 0;
            sOutput = "";
            byte[] bs = Encoding.Default.GetBytes(sInput);
            byte[] outbs = new byte[bs.Length];
            if (sInput == "") sOutput = "";
            else
            {
                A = false;
                len = bs.Length;
                if (len % 2 == 1)
                {
                    A = true;
                    sInput = sInput + "_";
                }
                for (iPin = 0; iPin < len; iPin++)
                {
                    outbs[iPin] = (byte)(Convert.ToInt32(bs[iPin]) + 128);
                }
            }
            sOutput = Encoding.Default.GetString(outbs);
            return sOutput;
        }
+1 一个汉字在delphi里的length为2,在C#里的长度为1 代码再小改一下

        public string Enc(string sInput)
        {
            string AllChar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            string sOutput;
            byte iPin;
            Boolean A;
            int len = 0;
            Int32 K = 0;
            sOutput = "";
            byte[] bs = Encoding.Default.GetBytes(sInput);
            byte[] outbs = new byte[bs.Length];
            if (sInput == "") sOutput = "";
            else
            {
                A = false;
                len = bs.Length;
                if (len % 2 == 1)
                {
                    A = true;
                    sInput = sInput + "_";
                    bs = Encoding.Default.GetBytes(sInput);
                    len = bs.Length;
                }

                for (iPin = 0; iPin < len; iPin++)
                {
                    outbs[iPin] = (byte)(Convert.ToInt32(bs[iPin]) + 128);
                }
            }
            sOutput = Encoding.Default.GetString(outbs);
            return sOutput;
        }
bdmh 2014-09-03
  • 打赏
  • 举报
回复
c#改成如下

        public string Enc(string sInput)
        {
            string AllChar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            string sOutput;
            byte iPin;
            Boolean A;
            int len = 0;
            Int32 K = 0;
            sOutput = "";
            byte[] bs = Encoding.Default.GetBytes(sInput);
            byte[] outbs = new byte[bs.Length];
            if (sInput == "") sOutput = "";
            else
            {
                A = false;
                len = bs.Length;
                if (len % 2 == 1)
                {
                    A = true;
                    sInput = sInput + "_";
                }
                for (iPin = 0; iPin < len; iPin++)
                {
                    outbs[iPin] = (byte)(Convert.ToInt32(bs[iPin]) + 128);
                }
            }
            sOutput = Encoding.Default.GetString(outbs);
            return sOutput;
        }
bdmh 2014-09-03
  • 打赏
  • 举报
回复
告诉我你的输入是什么,输出 应该是什么,我试试
agully 2014-09-03
  • 打赏
  • 举报
回复
引用 4 楼 bdmh 的回复:
是,delphi7中char是单字节,c#是unicode的,你都改用byte试试
都改用byte?麻烦指教下,我C#不是很懂,都是依样画葫芦的,谢谢
bdmh 2014-09-03
  • 打赏
  • 举报
回复
是,delphi7中char是单字节,c#是unicode的,你都改用byte试试
agully 2014-09-03
  • 打赏
  • 举报
回复
引用 2 楼 Cnwanglin 的回复:
AllChar:string 算法没问题吧 allchar没有使用的地方
没问题
Cnwanglin 2014-09-02
  • 打赏
  • 举报
回复
AllChar:string 算法没问题吧 allchar没有使用的地方
Cnwanglin 2014-09-02
  • 打赏
  • 举报
回复
AllChar:string='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 '; 后面有个空格?
Delphi XE2 正式版的破解程序,有效哦。 Delphi XE2 官方完整 delphicbuilder_xe2_win_dl.iso下载地址: http://altd.embarcadero.com/download/radstudio/xe2/delphicbuilder_xe2_win_dl.iso 文件大小: 2.33G MD5: de8b9f897e2ad678643b64898470b707 Delphi Prism XE2 - ISO 1.28G http://altd.embarcadero.com/download/prism/xe2/prism_xe2_win.iso RadPHP XE2 - ISO 343M http://altd.embarcadero.com/download/radphp/xe2/radphp_xe2_win.iso 建议大家用迅雷下载 ************************************** 英巴卡迪诺发布新版RAD Studio XE2开发工具套件 日前,英巴卡迪诺宣布发布新版RAD Studio XE2软件开发工具套件,新版包含了10多年来最深入全面的特性升级。RAD Studio XE2包含了新版本的Delphi、C++Builder、Prism和RadPHP。主要特性包括完整的Delphi 64位Windows支持,通过全新的FireMonkey富商业应用平台支持Mac OSX和iOS,以及通过RadPHP XE2支持安卓web和移动应用开发。 对Delphi XE2和C++Builder XE2来说,一个极其重要的新特性就是FireMonkey,业界第一款用于创建商业软件的原生的能全面利用到CPU和GPU计算能力的富应用平台。使用 FireMonkey,Delphi和C++Builder开发人员能开发出视觉绚丽的高清和3D应用程序,并与后台的企业级数据库如Oracle、微软 SQL Server、IBM DB2、Sybase和其他数据库互联互通。FireMonkey应用以原生方式运行在Windows PC和Mac上,可以完全利用到现代GPU的处理能力,以不可置信的细节处理能力和优异的性能表现展现数据和用户界面。FireMonkey还可以使 Delphi XE2用户为移动(iOS)设备创建原生的高清和3D应用程序。 Delphi和C++Builder为应用开发提供原生开发方式,而RadPHP XE2则支持web开发和移动设备应用的开发。使用RadPHP XE2,开发人员可以轻松为移动智能电话和平板电脑创建支持触碰和UI优化的web应用。开发人员可以部署他们的移动Web应用为原生移动应用到苹果公司的iOS应用商店和安卓的应用市场。在他们的移动Web应用,可以直接访问移动设备的硬件,如相机、GPS和重力感应器。 其他新增特性包括: Delphi XE2 和C++Builder XE2 Delphi XE2包括完整的Windows 64位对FireMonkey、编译器、调试器、RTL 和VCL的支持; dbExpress具有新的对InterBase XE, FireBird 2.5, SQL Anywhere 12 和ODBC的连接能力; 新的DataSnap移动连接器,带有原生的平台组件和示例以创建从移动客户端到Delphi DataSnap服务器的连接,支持安卓(Java), iOS (Objective C), 黑莓(Java) 和Windows Phone 7 (C#); 新增和更新的扩展工具,包括FastReport,用于快速设计和生成报表;Documentation Insight,用于Delphi的源代码文档工具; TeeChart、IBX、InstallAware、IP*Works、Aqtime、FinalBuilder、IntraWeb和Indy 的64位版本。 TeeChart、Indy和FinalBuilder还支持Mac平台; C++Builder XE2还包含了新的代码审计和QA度量工具; LiveBindings使用户能连接任意类型的信息到任意的FireMonkey用户界面和图形对象上。用户可以绑定实时数据到标准的用户界面控件、高清或3D图形元素上,以创建可视化任意类型数据的崭新方式; RadPHP: 集成式为移动优化的Web开发; 部署应用到Web, iOS, 或安卓; 扩展的Zend框架组件集; Embarcadero Prism: 来自RemObjects的全新的.NET Oxygene编译器; 匿名接口实现; FastReport.net

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧