memcpy数组与int的C#等效项是什么?

时间:2019-03-28 00:33:51

标签: c# c++

编辑:我正在考虑与可能重复的问题不同的问题,因为该问题的答案都没有包含我所使用的方法,即BitConverter类。如果我将其标记为非重复,则摆脱了潜在的重复问题链接here it is

我想知道这段代码的c#等价方式是什么,它认为数组中的每个元素都是一个字节,并将其复制到int中。

byte offsetdata[sizeof(int)] = { 0,0,0,0 };
offsetdata[0] = m_Response[responseIndex++];
offsetdata[1] = m_Response[responseIndex++];
offsetdata[2] = m_Response[responseIndex++];
offsetdata[3] = m_Response[responseIndex++];
int offset = 0;
memcpy(&offset, offsetdata, sizeof offset);
m_ZOffset = offset;

3 个答案:

答案 0 :(得分:2)

这可能是重复的,但是我不知道如何标记它。这是原始帖子:memcpy function in c#

在另一篇文章中,似乎有几种选择:

  1. Array.Copy
  2. Object.MemberwiseClone
  3. ICloneable接口

答案 1 :(得分:2)

看来您只想使用

  

返回一个32位带符号整数,该整数从四个字节转换为一个   字节数组中的指定位置

int offset =  BitConverter.ToInt32(somebyteData,0);

注意 :注意字节序

或者您可以只使用shift运算符

尽管您想使用memcpy,但这取决于您需要的重载,如果需要,您可以P /调用它。

[DllImport("msvcrt.dll", EntryPoint = "memcpy", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]
public static extern IntPtr memcpy(IntPtr dest, IntPtr src, UIntPtr count);

但是,对于指针来说,最后2个可能是等效的,Marshal.Copy到目前为止具有最多的通用性

  

从源数组中复制指定数量的字节,起始于a   从特定位置开始到目标数组的特定偏移量   偏移量。

  

将一个数组中的一系列元素复制到另一个数组中并执行   根据需要键入投放和拳击内容。

  

从1复制指定为长整数值的多个字节   内存中的另一个地址。

  

将数据从托管数组复制到非托管内存指针,或者   从非托管内存指针到托管数组。

答案 2 :(得分:0)

在C#中,您可以执行以下操作:

int offset = m_Response[responseIndex++];
offset <<= 8;
offset |= m_Response[responseIndex++];
offset <<= 8;
...

最后在offset中,您将拥有每个字节。