Mar*_*ell 95
byte[] bytes = BitConverter.GetBytes(i);
Run Code Online (Sandbox Code Playgroud)
虽然请注意,您可能需要检查BitConverter.IsLittleEndian以查看将要出现的方式!
请注意,如果您反复执行此操作,则可能希望通过移位操作(>>/ <<)或使用unsafe代码自行编写来避免所有这些短期数组分配.转换操作还具有以下优势:它们不受平台字节序的影响; 你总是按照你期望的顺序得到字节.
Chr*_*lor 33
Marc的回答当然是正确的答案.但自从他提到移位运算符和不安全代码作为替代.我想分享一个不太常见的选择.使用带Explicit布局的结构.这在原理上类似于C/C++ union.
下面是一个结构示例,可用于获取Int32数据类型的组件字节,好处是它是双向的,您可以操作字节值并查看对Int的影响.
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
struct Int32Converter
{
[FieldOffset(0)] public int Value;
[FieldOffset(0)] public byte Byte1;
[FieldOffset(1)] public byte Byte2;
[FieldOffset(2)] public byte Byte3;
[FieldOffset(3)] public byte Byte4;
public Int32Converter(int value)
{
Byte1 = Byte2 = Byte3 = Byte4 = 0;
Value = value;
}
public static implicit operator Int32(Int32Converter value)
{
return value.Value;
}
public static implicit operator Int32Converter(int value)
{
return new Int32Converter(value);
}
}
Run Code Online (Sandbox Code Playgroud)
现在可以如下使用上述内容
Int32Converter i32 = 256;
Console.WriteLine(i32.Byte1);
Console.WriteLine(i32.Byte2);
Console.WriteLine(i32.Byte3);
Console.WriteLine(i32.Byte4);
i32.Byte2 = 2;
Console.WriteLine(i32.Value);
Run Code Online (Sandbox Code Playgroud)
当然,不变性警察可能不会对最后的可能性感到兴奋:)
| 归档时间: |
|
| 查看次数: |
92131 次 |
| 最近记录: |