首先让我说,我已经查看了 Stackoverflow 上的一些帖子。我的问题是我是一名初级程序员,很难将解决方案配置到我的项目中。
我目前正在努力将一个“大端”转换为“小端”。
目前有一个浮动:
(4.61854E-41)
但我想以某种方式将其转换为如下所示:
(-1.0)
任何帮助,将不胜感激。
首先你检查你的系统是否是小端,然后根据它反转字节。
float num = 1.2f;
if (!BitConverter.IsLittleEndian)
{
byte[] bytes = BitConverter.GetBytes(num);
Array.Reverse(bytes, 0, bytes.Length);
num = BitConverter.ToSingle(bytes, 0);
}
Console.WriteLine(num);
Run Code Online (Sandbox Code Playgroud)
2022 年正确的做法是使用BinaryPrimitives.
float num = 1.2f;
if (!BitConverter.IsLittleEndian)
{
int bits = BitConverter.SingleToInt32Bits(num);
int revBits = BinaryPrimitives.ReverseEndianness(bits);
num = BitConverter.Int32BitsToSingle(revBits);
}
Console.WriteLine(num);
Run Code Online (Sandbox Code Playgroud)
这在性能方面得到了更好的优化,并且使用了bswap现代 x86 处理器上的指令。ARM 的等效项是REV32.
请参阅JIT-CodeGen与@sLw 的答案之间的差异。
BinaryPrimitives 可从 .NET Core 2.1 和 .NET Standard 2.1 获得。作为 .NET Framework 用户,传统方式仍然是最好的方式(参考:.NET API Catalog)。
| 归档时间: |
|
| 查看次数: |
6248 次 |
| 最近记录: |