我在一个小项目上工作,我需要在一个字节数组中存储4个int
类型(稍后将在套接字上发送)。
这是代码:
int a = 566;
int b = 1106;
int c = 649;
int d = 299;
byte[] bytes = new byte[16];
bytes[0] = (byte)(a >> 24);
bytes[1] = (byte)(a >> 16);
bytes[2] = (byte)(a >> 8);
bytes[3] = (byte)a;
我移动了第一个值的位,但我现在还不确定如何将其取回...执行相反的过程。
我希望我的问题很清楚,如果我错过了什么,我会很高兴再次解释它。 感谢。
答案 0 :(得分:2)
取决于你评论回复,你可以这样做:
int a = 10;
byte[] aByte = BitConverter.GetBytes(a);
int b = 20;
byte[] bByte = BitConverter.GetBytes(b);
List<byte> listOfBytes = new List<byte>(aByte);
listOfBytes.AddRange(bByte);
byte[] newByte = listOfBytes.ToArray();
答案 1 :(得分:2)
要从字节数组中提取Int32
,请使用以下表达式:
int b = bytes[0] << 24
| bytes[1] << 16
| bytes[2] << 8
| bytes[3]; // << 0
以下是展示的.NET Fiddle。
答案 2 :(得分:0)
您可以使用MemoryStream
来包装一个字节数组,然后使用BinaryWriter
将项目写入数组,并BinaryReader
从数组中读取项目。
示例代码:
int a = 566;
int b = 1106;
int c = 649;
int d = 299;
// Writing.
byte[] data = new byte[sizeof(int) * 4];
using (MemoryStream stream = new MemoryStream(data))
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(a);
writer.Write(b);
writer.Write(c);
writer.Write(d);
}
// Reading.
using (MemoryStream stream = new MemoryStream(data))
using (BinaryReader reader = new BinaryReader(stream))
{
a = reader.ReadInt32();
b = reader.ReadInt32();
c = reader.ReadInt32();
d = reader.ReadInt32();
}
// Check results.
Trace.Assert(a == 566);
Trace.Assert(b == 1106);
Trace.Assert(c == 649);
Trace.Assert(d == 299);