Int32値を3バイト(24ビット)整数に変換する必要があります。エンディアンは変わりませんが、サインを適切に動かす方法はわかりません。値は既に適切な範囲に制限されています。私は4バイトを3に変換する方法を理解できません。C#4.0を使用します。これは、ハードウェアの統合のため、私は24ビットの値を持っている必要があります、32ビットを使用することはできません。Int32から24ビット符号付き整数への変換
答えて
変換を実行する場合は、4バイト数の先頭バイトを削除します。 2の補数表現は、符号を正しく処理します。 Int32
変数に24ビット数値を保存する場合は、v & 0xFFFFFF
を使用して下位24ビットを取得できます。私はバイト配列についてのあなたのコメントを見ました:配列にスペースがある場合は、数字の4バイトをすべて書き、最初の3つだけを送ります。それはリトルエンディアンシステムに特有のものです。この発見
情報ありがとうございます。私はそれが典型的に最も重要なビットの中に保持されているので、まだサインについて確信していません。例えば、Console.Write(-42&0xffffff);というコードを試してみてください。または私はここに何かを逃していますか? – drharris
これは符号なしの(符号ビットが最上位バイトにあるので)最下位3バイトを保持します。しかし、マスクを使用しても、AND演算の後に、 '42'と' -42'は異なる結果を生成します。 –
したがって、 'int bit24 = bit32&0xffffff;'を実行してから、否定をテストするなら 'bit24 | = 0x800000;'を実行できますか?基本的には、その符号ビットを手動でリセットしますか? – drharris
:あなただけの配列の最後の3つの要素を取得する必要がありますようにhttp://bytes.com/topic/c-sharp/answers/238589-int-byte
int myInt = 800;
byte[] myByteArray = System.BitConverter.GetBytes(myInt);
が鳴ります。
EDIT:エレミヤが指摘したように、あなたは、24ビットの整数を格納にどのような種類の予定ですか
int myInt = 800;
byte[] myByteArray = System.BitConverter.GetBytes(myInt);
if (BitConverter.IsLittleEndian) {
// get the first 3 elements
} else {
// get the last 3 elements
}
ドキュメントには、 'GetBytes'の結果がシステムのネイティブエンディアンにあると書かれているので、移植可能であることをテストする必要があることに注意してください。私はあなたがリトルエンディアンの「最後の3」ではなく「最初の3つの要素」を意味すると思います。 –
良い点ですが、3つの回答すべてに同じ欠陥がありますか?または、ロジックが下位レベルで処理されるため、v&0xFFFFFFが機能しますか? – Joe
どのような欠陥がありますか?リトルエンディアンシステムが必要ですか?バイト配列に書き込むすべてのソリューションは、エンディアンチェックを必要とするようです。 'v&0xFFFFFF'は32ビットワード内で行われ、バイトとしてどのように表現されるかを知る必要はありません。 –
- 1. Matlabの24ビットADCシリアル・リード・データを3バイト・フォーマットから符号付き整数(int32)に変換
- 2. 符号なし整数から符号付き整数への変換または逆の変換
- 3. 符号付き32ビット整数を符号なし32ビット整数に変換する方法は?
- 4. 5ビットの符号付き整数?
- 5. 24ビット符号付きデータ型
- 6. Androidで符号なしint型符号付き整数への変換
- 7. u8バイトから7ビット符号付き整数を抽出
- 8. 2つの16ビット符号付きバイトから符号付き整数を取得しますか?
- 9. JavaScriptで符号付き16ビット整数に2バイトを変換する
- 10. 符号なしと符号付きバイナリ整数への追加
- 11. 8ビット符号なしPCMを8ビット符号付きPCMに変換
- 12. ColdFusion IPv6から128ビット符号なし整数へ
- 13. 2つの符号なし16ビット整数をPerlの符号付き32ビット整数に変換する方法
- 14. AWKの大きな符号なし整数を符号付き整数に変換する(バイナリ)
- 15. 32ビットプロセッサで符号付き整数と符号なし整数を使用して符号付き64ビット整数を作成する方法
- 16. 24ビットから1ビットのビットマップへの変換
- 17. Pythonバイトを「符号なし8ビット整数」に変換する
- 18. Javascript:符号付き整数をjavacript値に変換する
- 19. 符号付き整数ネットワークとホスト変換
- 20. PHPで符号付きint32リトルエンディアンをアンパック
- 21. DataViewで符号付き24ビット整数を設定するにはどうすればよいですか?
- 22. オイラーからクォータニオン符号への変換
- 23. React Native - 値 '3130049174'が32ビットの符号付き整数に収まらない
- 24. Clojureの符号なし16ビット整数
- 25. 16ビット16進数の文字列をJavaで符号付き整数に変換する
- 26. 10進数から整数へのビット単位の変換
- 27. 32ビット符号なし "Real"データ型(2つの16ビット符号付きワードに分割)をjavascriptに変換
- 28. 符号付き16ビット整数は2の補数16ビット整数と同じです
- 29. 符号付き文字配列を符号なし整数に変換できますか?
- 30. キャストと符号なしから符号付きへのキャスト
ような何かを
必要があるだろうか? –
バイト配列は問題ありません。私はシリアル接続を介して3バイトを出力するので、私はバイトにそれを得ることができる限り、私は行くのがいいです。 – drharris
その3行目は何もしません( 'i&0xffffff'は常に正です)。また、endiannessesの異なるシステムで動作するJoeの答えの2番目の部分に従うこともできます。あなたが持っているコードは今のところ動作しますが、PowerPCやMIPSなどで実行しようとすると異常な方法で壊れます。 –