加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:37:47 所属栏目:百科 来源:网络整理
导读:我有4个字节表示存储在2个独立字节数组中的整数.我想将这些转换为Int32而不复制到第三个字节数组并使用memorystream读取它. 数据在两个字节数组之间拆分的原因是因为这是我的问题的一个简化示例,它涉及大量无法放入单个bytearray的数据. 有没有办法实现这个
我有4个字节表示存储在2个独立字节数组中的整数.我想将这些转换为Int32而不复制到第三个字节数组并使用memorystream读取它.

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

有没有办法实现这个目标?我不希望将两个字节数组连接成一个thrid,因为性能影响对我来说至关重要.

月亮

解决方法

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

[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);
  }
 }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读