c#:将int转换为适合的最小字节数组

Jer*_*acs 7 c# bytearray

我想要一种优雅,有效的方法来获取任何无符号整数并将其转换为适合的最小字节数组.例如:

250 = byte[1]
2000 = byte[2]
80000 = byte[3]
Run Code Online (Sandbox Code Playgroud)

所以我可以写:

var foo = getBytes(bar);
Run Code Online (Sandbox Code Playgroud)

并且foo将根据价值而具有不同的长度bar.我该怎么办?

jas*_*son 3

您可以像这样作为扩展方法:

public static byte[] ToByteArray(this int value) {
     var bytes = Enumerable
                     .Range(0, sizeof(int))
                     .Select(index => index * 8)
                     .Select(shift => (byte)((value >> shift) & 0x000000ff))
                     .Reverse()
                     .SkipWhile(b => b == 0x00)
                     .ToArray();
     return bytes;
}
Run Code Online (Sandbox Code Playgroud)

然后:

int j = 2000;
var bytes = j.ToByteArray();
Console.WriteLine(bytes.Length);
for(int index = 0; index < bytes.Length; index++) {
    Console.WriteLine("{0:x}", bytes[index]);
}
Run Code Online (Sandbox Code Playgroud)

给出:

2
0x07
0xd0
Run Code Online (Sandbox Code Playgroud)

并在上面替换j = 2000j = 80000

3
0x01
0x38
0x80
Run Code Online (Sandbox Code Playgroud)

并在上面替换j = 2000j = 250

1
0xfa
Run Code Online (Sandbox Code Playgroud)