在 C# 中将数字转换为字节而不分配

mik*_*ike 1 c# arrays math garbage-collection

如何将数值(例如,,,...)转换floatshort多个int值,byte而不必像那样在堆上为数组分配内存System.BitConverter.GetBytes

像这样的东西:

public static void GetBytes(short input, out byte byte0, out byte byte1)
{
    //demo code, just to show which results I need
    var bytes = System.BitConverter.GetBytes(input);
    byte0 = bytes[0];
    byte1 = bytes[1];
}
Run Code Online (Sandbox Code Playgroud)

注意:我仅限于 .NET Framework 4.8,因此(我认为)C# 7.3。

Mar*_*ell 5

只是施放和转移?

public static void GetBytes(short input, out byte byte0, out byte byte1)
{
    byte0 = (byte)input;
    byte1 = (byte)(input >> 8);
}
Run Code Online (Sandbox Code Playgroud)

请注意,您可以简单地反转不同字节顺序的顺序。

请注意,如果您使用“已检查”上下文,则还需要屏蔽:

public static void GetBytes(short input, out byte byte0, out byte byte1)
{
    byte0 = (byte)(input & 0xFF);
    byte1 = (byte)((input >> 8) & 0xFF);
}
Run Code Online (Sandbox Code Playgroud)

(在未经检查的上下文中,强制转换byte本身就足够了 - 附加位被丢弃)