【发布时间】:2021-06-13 18:34:54
【问题描述】:
我想以大端方式将两个 32 位值添加到 byte[8]。
int a = 1; // => [ 0, 0, 0, 1]
int b = 2; // => [ 0, 0, 0, 2]
导致
[0, 0, 0, 1, 0, 0, 0, 2]
那么,唯一的衬线是什么?
到目前为止我的方法是
int a = 1;
int b = 2;
byte[] array = new byte[] { };
array = array.Concat(BitConverter.GetBytes(a)).ToArray();
array = array.Concat(BitConverter.GetBytes(b)).ToArray();
所以这已经足够复杂了,但是小端。所以我会为每个int 添加一行以将它们反转。
python 中的两个对话:
a = 1;
b = 2;
array = a.to_bytes(4, 'big') + b.to_bytes(4, 'big')
C# 方法是什么?
【问题讨论】:
-
嗯,您自己的一些选择有点奇怪。 IE。不清楚为什么你不只是有
var array = BitConverter.GetBytes(a).Concat(BitConverter.GetBytes(b)).ToArray()而不是例如首先创建一个空数组并存储一个中间形式,其中仅将a添加到数组中。在 Python 版本中,您似乎没有做同样的事情...... -
(a
-
如果您在项目中可以访问 dotNET 3.1,则会有一个新的
BinaryPrimitives库。 -
这能回答你的问题吗? C# int to byte[] 或 this 回答。
-
小心使用 2'scompliment 符号扩展的负数。你的号码是有符号还是无符号?