日期:2014-05-17  浏览次数:20752 次

c++函数转c#时参数处理的难题
有如下c++写的函数
C/C++ code

void convert(unsigned char A, char *a)
{
    a[0]=(A&128)>>7;
    a[1]=(A&64)>>6;
    a[2]=(A&32)>>5;
    a[3]=(A&16)>>4;
    a[4]=(A&8)>>3;
    a[5]=(A&4)>>2;
    a[6]=(A&2)>>1;
    a[7]=(A&1);
}
char * a = new  char[32];
//调用
    convert(pin[j],&a[j*8]);



在C#中 一般的参数我都把convert函数这么处理:
C# code

public static void convert(byte A, string[] a)
        {
            a[0] = ((A & 128) >> 7).ToString();
            a[1] = ((A & 64) >> 6).ToString();
            a[2] = ((A & 32) >> 5).ToString();
            a[3] = ((A & 16) >> 4).ToString();
            a[4] = ((A & 8) >> 3).ToString();
            a[5] = ((A & 4) >> 2).ToString();
            a[6] = ((A & 2) >> 1).ToString();
            a[7] = ((A & 1)).ToString();
        }


但是出现 convert(pin[j],&a[j*8]); 有&a[j*8]这个引用我就不知道怎么处理了,如果函数改写成
C# code

public static void convert(byte A, ref sbyte a)
{
 a[0] = ((A & 128) >> 7);
}


会报索引器错误,求高人指点啊,先谢过大家了

------解决方案--------------------
增加一个参数,把起始索引传过去
这个参数可以给一个默认值
C# code
public static void convert(byte A, string[] a,int startIndex=0)
{
    a[startIndex]=...;
    a[startIndex+1]=...;
…… ……

------解决方案--------------------
不知道楼主你咋学的C++,char *到了C#里面竟然变成了string[],要不就是sbyte,还能再雷人点不??
居然还用到了 ToString()
C# code

a[0] = ((A & 128) >> 7).ToString();