gpt4 book ai didi

c# - 从两个字节数组读取或转换为 Int32

转载 作者:行者123 更新时间:2023-11-30 14:18:59 28 4
gpt4 key购买 nike

我有 4 个字节代表一个存储在 2 个单独字节数组中的整数。我想将它们转换成一个 Int32 而不复制到第三个字节数组并使用内存流读取它。

数据被拆分成两个字节数组的原因是因为这是我的问题的一个简化示例,它涉及无法放入单个字节数组的大量数据。

有什么办法可以实现吗?由于对我来说至关重要的性能影响,我不希望将两个字节数组连接成一个三分之一。

月亮

最佳答案

你可以使用这样的结构布局

[StructLayout(LayoutKind.Explicit, Size=4)]
struct UnionInt32Value
{
[FieldOffset(0)] public byte byte1;
[FieldOffset(1)] public byte byte2;
[FieldOffset(2)] public byte byte3;
[FieldOffset(3)] public byte byte4;
[FieldOffset(0)] public Int32 iVal;
}

以正确的顺序分配您的字节,然后从 iVal 读取您的 Int32;

编辑:示例代码

using System;
using System.Runtime.InteropServices;
namespace Test
{
class Program
{
[StructLayout(LayoutKind.Explicit, Size=4)]
struct UnionInt32Value
{
[FieldOffset(0)] public byte byte1;
[FieldOffset(1)] public byte byte2;
[FieldOffset(2)] public byte byte3;
[FieldOffset(3)] public byte byte4;
[FieldOffset(0)] public Int32 iVal;
}
public static void Main(string[] args)
{
UnionInt32Value v = new UnionInt32Value();
v.byte1=1;
v.byte2=0;
v.byte3=0;
v.byte4=0;
Console.WriteLine("this is one " + v.iVal);

v.byte1=0xff;
v.byte2=0xff;
v.byte3=0xff;
v.byte4=0xff;
Console.WriteLine("this is minus one " + v.iVal);

Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}

关于c# - 从两个字节数组读取或转换为 Int32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3641359/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com