从c+转换代码段+;到c# 我试图把代码从C++转换成C语言。但是我被卡住了。 有人能告诉我哪里错了吗

从c+转换代码段+;到c# 我试图把代码从C++转换成C语言。但是我被卡住了。 有人能告诉我哪里错了吗,c#,c++,C#,C++,C++代码是: void CALLBACK Test(void *buffer, DWORD length) { BYTE *b=(BYTE*)buffer, temp[20000]; DWORD p=0; while (p<length) { DWORD c=min(length-p, sizeof(temp)); memcpy(temp, b+p, c); c=SendData(dummy, temp, c); if (c==-1) b

C++代码是:

void CALLBACK Test(void *buffer, DWORD length)
{
  BYTE *b=(BYTE*)buffer, temp[20000];
  DWORD p=0;
  while (p<length) 
  {
    DWORD c=min(length-p, sizeof(temp));
    memcpy(temp, b+p, c);
    c=SendData(dummy, temp, c);
    if (c==-1) break;
    p+=c;
  }
}

where is SendData(int, byte[], int)
void回调测试(void*缓冲区,DWORD长度)
{
字节*b=(字节*)缓冲区,温度[20000];
德沃德p=0;

虽然(p您可能想看:,因为这实际上就是您试图用
b+p
部分来完成的。

您可能想看:,因为这实际上就是您试图用
b+p
部分来完成的。

我想您想使用5-arg版本的Array.Copy,它允许您将偏移量传递到起始数组和目标数组。这是一种更为“C”的方式,与指针运算相反。

我想您应该使用5-arg版本的Array.Copy,它允许您将偏移量传递到起始数组和目标数组。这是一种更为“C”的方式与指针运算相反的方式。在C++中,

< p>可以向指针添加一个dWord(int,真),编译器知道将指针的地址偏移到指定的数量。C ^通常不让你这样做。(有一种方法可以在C中做指针运算,但是不要这样做。)因此,在C#版本中,您需要另一种方式在相对于
b
开头的偏移量
p
处进行复制。的重载之一将允许您执行此操作。类似于:

Array.Copy(temp, 0, b, p, c);

在C++中,你可以给指针添加一个DWORD(INT,真的),编译器知道把指针的地址偏移到指定的数量。C ^通常不会让你这样做。(有一种方法可以在C语言中做指针运算,但是不要这样做。)因此,在C#版本中,您需要另一种方式在相对于
b
开头的偏移量
p
处进行复制。的重载之一将允许您执行此操作。类似于:

Array.Copy(temp, 0, b, p, c);
与其进行“文字”转换,不如研究函数的功能,并在C#中重新进行转换,而不是进行“文字”转换转换,你不认为看看函数做什么,在C++中做这件事更好吗?在C语言中没有什么可以反对的,当你知道你在做什么的时候,你可以加速代码很多,并把C++代码转换成C代码。当然,你应该真正知道你在做什么。在C语言中没有什么可以反对的,当你知道你在做什么的时候,你可以加速代码很多,并把C++代码翻译成C代码。(当然,图像处理,图像加载,…)当然你应该知道你在做什么。