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

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

概述我有4个字节表示存储在2个独立字节数组中的整数.我想将这些转换为Int32而不复制到第三个字节数组并使用memorystream读取它. 数据在两个字节数组之间拆分的原因是因为这是我的问题的一个简化示例,它涉及大量无法放入单个bytearray的数据. 有没有办法实现这个目标?我不希望将两个字节数组连接成一个thrid,因为性能影响对我来说至关重要. 月亮 您可以使用这样的结构布局 [Struct 我有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);  } }}
总结

以上是内存溢出为你收集整理的c# – 从两个字节数组中读取或转换为Int32全部内容,希望文章能够帮你解决c# – 从两个字节数组中读取或转换为Int32所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1216175.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存