将 Enum 转换为 IEnumerable 字节
Cast Enum to IEnumerable byte
给定以下枚举
enum MyEnum {
MyVal1 = 0x0000,
MyVal2 = 0xF0F0,
MyVal3 = 0x1234
}
我想编写一个返回给定枚举的 IEnumerable 的方法。
IEnumerable<byte> Foo(MyEnum myEnum){
//...
}
所以
byte[] bytes = Foo(MyEnum.MyVal1).ToArray(); //bytes == 0x0000
byte[] bytes = Foo(MyEnum.MyVal2).ToArray(); //bytes == 0xF0F0
byte[] bytes = Foo(MyEnum.MyVal3).ToArray(); //bytes == 0x1234
请指教。我正在使用 Compact Framework 3.5
实际上,您可以为此目的使用内置 BitConverter.GetBytes
:
IEnumerable<byte> Foo(MyEnum myEnum) {
return BitConverter.GetBytes((ushort)myEnum);
}
可能您在这里要注意的唯一关键是将您的 enum
强制转换为 ushort
,因为您的 enum
是 2 个字节。
另请注意,默认情况下结果将在 BitConverter.IsLittleEndian
属性 之后。如果是 true
,则结果是小端,如果是 false
,则结果是大端。
给定以下枚举
enum MyEnum {
MyVal1 = 0x0000,
MyVal2 = 0xF0F0,
MyVal3 = 0x1234
}
我想编写一个返回给定枚举的 IEnumerable 的方法。
IEnumerable<byte> Foo(MyEnum myEnum){
//...
}
所以
byte[] bytes = Foo(MyEnum.MyVal1).ToArray(); //bytes == 0x0000
byte[] bytes = Foo(MyEnum.MyVal2).ToArray(); //bytes == 0xF0F0
byte[] bytes = Foo(MyEnum.MyVal3).ToArray(); //bytes == 0x1234
请指教。我正在使用 Compact Framework 3.5
实际上,您可以为此目的使用内置 BitConverter.GetBytes
:
IEnumerable<byte> Foo(MyEnum myEnum) {
return BitConverter.GetBytes((ushort)myEnum);
}
可能您在这里要注意的唯一关键是将您的 enum
强制转换为 ushort
,因为您的 enum
是 2 个字节。
另请注意,默认情况下结果将在 BitConverter.IsLittleEndian
属性 之后。如果是 true
,则结果是小端,如果是 false
,则结果是大端。