我在C#中有一个uint类型的数组,检查程序是否在低端字节序的计算机上工作后,我想将数据转换为大端字节序类型。因为数据量可能非常大,但始终是偶数,所以我一直在考虑将两种uint类型作为ulong类型,以实现更好的性能并在ASM中对其进行编程,因此我正在寻找一种速度非常快(如果可能的话,最快的一种) )汇编程序算法,将little-endian转换为big-endian。
最佳答案
对于大量数据,要使用bswap
指令(在Visual C++中为 _byteswap_ushort
, _byteswap_ulong
, and _byteswap_uint64
内部函数提供)。这甚至会胜过手写组装。在没有P/Invoke的纯C#中,这些功能不可用,因此:
PS:许多人不知道字节交换内在函数。它们的性能是惊人的,对于浮点数据则是如此,因为它会将它们作为整数进行处理。如果没有为每个单字节交换用例手动编码寄存器负载,就无法克服它,如果您尝试这样做,可能会给优化器带来比以往任何时候都大的打击。
关于c# - 在ASM中快速从小尾数到大尾数转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1358747/