当前位置:编程学习 > C#/ASP.NET >>

C++代码转C#

以下是C++代码,请各位大大帮帮忙将其转成C#,分不多了将就一下,谢谢!
String strName = MaskEdit_Name->Text;
        char* pName = strName.c_str();
        for(int nLoop = 0; nLoop < strName.Length(); nLoop ++)
            CardInfo.tName.str[nLoop] = *pName++;
        for(int nLoop = strName.Length(); nLoop < 8; nLoop ++)
            CardInfo.tName.str[nLoop] = ' ';

注:CardInfo.tName--->CardInfo为一结构体struct; tName为8位char str[8] --------------------编程问答-------------------- 就这一段转个鬼 --------------------编程问答-------------------- 涉及到指针了? 不会啊 ! 好好学习学习了! --------------------编程问答--------------------
引用 1 楼 ccitzs 的回复:
就这一段转个鬼


是不够详细吗?那我再补上相关的代码吧:
//结构定义
/////////////////////////////////////////////////////////////////////////
struct TUserDef8
{
    char str[8];
};

struct TUserDef7
{
    char str[7];
};

struct TUserDef4
{
    char str[4];
};

struct ATTGUARDCARD
{
int nFileSort;
int nCardID;
TUserDef7 tPersonID;
int nGrade, nAttGroup;
TUserDef4 tUserKey;
    TUserDef8 tName;
int nYear, nMonth, nDay;
}; --------------------编程问答-------------------- 目前我已将ATTGUARDCARD结构对应的C#代码转换如下:
        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
        public struct ATTGUARDCARD
        {
            public int nFileSort;
            public int nCardID;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
            public sbyte[] tPersonID;
            public int nGrade;
            public int nAttGroup;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
            public sbyte[] tUserKey;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
            public sbyte[] tName;
            public int nYear;
            public int nMonth;
            public int nDay;
        } --------------------编程问答-------------------- 很简单。。。就是把文本框输入的内容(strName)赋值给CardInfo.tName,且长度不足8的部分补空格

我这么说你还不会写C#么? --------------------编程问答-------------------- 对上述代码我自己转换的是这样的:
            Interface.ATTGUARDCARD CardInfo=new Interface.ATTGUARDCARD();
                string strName = MaskEdit_Name.Text;
                sbyte[] sbAryName = (sbyte[])((Array)System.Text.Encoding.Default.GetBytes(strName)); //将strName转换为sbyte[]
                CardInfo.tName = sbAryName;
但tName对应的是8位,所以这样转换有问题,请知道的高人帮帮忙,谢谢! --------------------编程问答-------------------- 另外最好不要用Marshal,一般来说都可以避免使用指针的 --------------------编程问答-------------------- 哦对了,有个问题你要注意,从代码上看C++是使用ASCII编码,C#默认是UTF-8
所以文本框输入以后的字符串也将是UTF-8,故你不应该转sbyte,应直接作为char来操作,除非你有特殊要求必须转成ASCII --------------------编程问答--------------------
引用 5 楼 shinnakoruru 的回复:
很简单。。。就是把文本框输入的内容(strName)赋值给CardInfo.tName,且长度不足8的部分补空格

我这么说你还不会写C#么?


文本框输入的内容(strName)----》为string型,CardInfo.tName---》为sbyte[]型
长度不足8的部分补空格---->如何补,是先赋值后再补,还是先补空格再赋值?能提供一下代码? --------------------编程问答-------------------- char* pName = strName.c_str();
这一句是把string转换成char *,可以不要写了,直接用string然后拆分成字符,循环放入CardInfo.tName.str[nLoop]

拆分string用char[] xx=strName.ToCharArray();
--------------------编程问答-------------------- 我不知道你整个东西的应用环境
C++中把tName定义为sbyte可能有多种考虑(如果是我可能会定义byte或char),毕竟ASCII编码下一个字就是1字节(中文2字节,但ASCII会拆开)
你转成C#后是否还应该使用sbyte就是一个疑问了,若要用对应的ASCII码参与数学运算,则可以理解
否则,你还是应该用char[]型甚至string --------------------编程问答-------------------- 这里指针只是便于c++中操作字符串 没什么实际意义 --------------------编程问答-------------------- 谢谢上述几位大大的回复,非常感谢! --------------------编程问答--------------------
引用 11 楼 shinnakoruru 的回复:
我不知道你整个东西的应用环境
C++中把tName定义为sbyte可能有多种考虑(如果是我可能会定义byte或char),毕竟ASCII编码下一个字就是1字节(中文2字节,但ASCII会拆开)
你转成C#后是否还应该使用sbyte就是一个疑问了,若要用对应的ASCII码参与数学运算,则可以理解
否则,你还是应该用char[]型甚至string

从代码上看C++是使用ASCII编码---》是的,是使用ASCII编码
那如果使用char[]的话上面的代码怎样转成C#呢,不好意思,刚入门不懂,请多多指点指点,谢谢!
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,