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] --------------------编程问答-------------------- 就这一段转个鬼 --------------------编程问答-------------------- 涉及到指针了? 不会啊 ! 好好学习学习了! --------------------编程问答--------------------
是不够详细吗?那我再补上相关的代码吧:
//结构定义
/////////////////////////////////////////////////////////////////////////
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 --------------------编程问答--------------------
文本框输入的内容(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++中操作字符串 没什么实际意义 --------------------编程问答-------------------- 谢谢上述几位大大的回复,非常感谢! --------------------编程问答--------------------
从代码上看C++是使用ASCII编码---》是的,是使用ASCII编码
那如果使用char[]的话上面的代码怎样转成C#呢,不好意思,刚入门不懂,请多多指点指点,谢谢!
补充:.NET技术 , C#