C#int到byte []

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (75)

我需要一个转换intbyte[]这样做是使用BitConverter.GetBytes()。但我不确定如果符合以下规范:

一个XDR有符号整数是一个32位数据,编码范围[-2147483648,2147483647]中的一个整数。整数用二的补码表示。最重要和最不重要的字节分别是0和3。整数被声明如下:

资源: RFC1014 3.2

我怎么能做一个int字节转换,满足上述规格?

提问于
用户回答回答于

RFC只是试图说一个有符号的整数是一个正常的4字节的整数,字节以big-endian方式排序。

现在,你很可能在一个小端机器上工作,并BitConverter.GetBytes()会给你byte[]倒过来。所以你可以尝试:

int intValue;
byte[] intBytes = BitConverter.GetBytes(intValue);
Array.Reverse(intBytes);
byte[] result = intBytes;

然而,为了使代码变得更加便携,你可以这样做:

int intValue;
byte[] intBytes = BitConverter.GetBytes(intValue);
if (BitConverter.IsLittleEndian)
    Array.Reverse(intBytes);
byte[] result = intBytes;
用户回答回答于

这里有另外一个方法:我们都知道1x字节= 8x位,而且“常规”整数(int32)包含32位(4字节)。我们可以使用>>操作符将位右移(>>操作符不会改变值)。

int intValue = 566;

byte[] bytes = new byte[4];

bytes[0] = (byte)(intValue >> 24);
bytes[1] = (byte)(intValue >> 16);
bytes[2] = (byte)(intValue >> 8);
bytes[3] = (byte)intValue;

Console.WriteLine("{0} breaks down to : {1} {2} {3} {4}",
    intValue, bytes[0], bytes[1], bytes[2], bytes[3]);

扫码关注云+社区

领取腾讯云代金券