ビッグエンディアンのバイナリストリームから読み込みます。 BitConverterクラスはこれを自動的に行います。残念ながら、私が必要とする浮動小数点の変換はBitConverter.ToSingle(byte [])と同じではないので、私は同僚から自分のルーチンを持っています。しかし、入力バイト[]はリトルエンディアンである必要があります。誰もバイト[]配列のエンディアンを高速に変換できますか?確かに、私は各バイトを交換することができますが、そこにトリックがある必要があります。ありがとう。ビッグエンディアンからリトルエンディアンへの配列のバイトをスワップするための高速な方法#
答えて
あなたの同僚のルーチンはどのように見えますか?バイトに明示的にアクセスする場合は、バイトを反転するのではなく、コードを変更することもできます(ビッグエンディアンデータの別のメソッドを作成することもできます)。ここで
は、バイト配列内のシングルのためのエンディアンを変更するための高速な方法です。
public static unsafe void SwapSingles(byte[] data) {
int cnt = data.Length/4;
fixed (byte* d = data) {
byte* p = d;
while (cnt-- > 0) {
byte a = *p;
p++;
byte b = *p;
*p = *(p + 1);
p++;
*p = b;
p++;
*(p - 3) = *p;
*p = a;
p++;
}
}
}
私の16進数での入力が62,4d、00,4eであるとすると、出力は49,62,4e、00であるはずですが、これは16bitワードで作業している可能性があります。 SwapSinglesは私が必要としていない4e、00,4d、62を返します。 – initialZero
@initialZero:Singleは4バイトです。だから、あなたはバイトを持っていないか、それともシングルを表していないのでしょうか? – Guffa
私は、LINQを使用します。あなたの心のコンテンツへ
var bytes = new byte[] {0, 0, 0, 1};
var littleEndianBytes = bytes.Reverse().ToArray();
Single x = BitConverter.ToSingle(littleEndianBytes, 0);
あなたができるも.Skip()
と.Take()
、または他のBitConverterメソッドでインデックスを使用します。
- 1. ビッグエンディアンとリトルエンディアンのマシン
- 2. バイトオーダーのビッグエンディアンとリトルエンディアンのサポート
- 3. ビッグエンディアンまたはリトルエンディアンに?
- 4. mmapビッグエンディアンとリトルエンディアンの比較
- 5. ネット上のビッグエンディアンまたはリトルエンディアン?
- 6. Java配列からNumPy配列(Py4J)への高速変換
- 7. OpenSSLのバイトシーケンスは、リトルエンディアンかビッグエンディアンのどちらですか?
- 8. ctypes配列をPythonリストに変換するための高速な方法は?
- 9. バイト配列をvbでバイナリに変換するより高速な方法は?
- 10. ビッグエンディアンByteBufferをJavaのリトルエンディアンに書き込む方法
- 11. リトルエンディアンとビッグエンディアンの両方を使用しているのはなぜですか?
- 12. 文字列配列からPandasデータフレームへの高速変換
- 13. リトルエンディアンのバイト配列を2つ追加する
- 14. リトルエンディアン順のバイト配列値をshort値に変換する
- 15. dictと配列を使ったPythonの高速な方法
- 16. Java、バイト配列からバイトのコレクションを取得する方法
- 17. 2Dダブル配列からバイト配列へ
- 18. 浮動小数点インデックスから配列への高速検索
- 19. バイト配列(SWT)へのイメージ作成/書き込みを高速化
- 20. スプレッドシートの列から配列を取り込むための最速の方法
- 21. dtのエンティティを変換するための高速な方法
- 22. MimeMessageからバイト配列への変換
- 23. Powershellバイトからビットへの配列
- 24. 中間インデックス配列を持たないnumpy配列から高速選択する方法
- 25. Eclipseでライブラリをリンクするための高速な方法CDT
- 26. リトルエンディアンの場合、奇数バイトのアドレスをエンコードする方法は?
- 27. コンパイラがC言語のリトルエンディアンかビッグエンディアンかを判断
- 28. 2つの配列間の等しいバイト数を高速にカウントする
- 29. バイト配列からulong配列への変換
- 30. 無効なURLからbase64へのバイト配列の変換
メッセージオブジェクトであらかじめ配列を変換する必要があります。 – initialZero
Jon、MiscUtilにEndianBitConverterがありませんか? – LBushkin
@LBushkin:そうです、それが私の最初の考えでしたが、これは別の問題であるように思えます。 –