编辑:我正在考虑与可能重复的问题不同的问题,因为该问题的答案都没有包含我所使用的方法,即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;
答案 0 :(得分:2)
这可能是重复的,但是我不知道如何标记它。这是原始帖子:memcpy function in c#
在另一篇文章中,似乎有几种选择:
答案 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
中,您将拥有每个字节。