問題タブ [bitconverter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
3236 参照

c# - C#でサウンドデータのサンプル値を取得する方法

WAV ファイルのサウンド データのサンプル値を取得する必要があるため、それらのサンプル値を使用して、毎秒そのサウンド データの振幅値を取得する必要があります。

重要: Naudio ライブラリまたは wmp ライブラリを使用してオーディオ データのサンプル値を取得する方法はありますか?

私はこの方法でサンプル値を取得しています:

しかし、(-326260) のような負の値を取得しています。それで、これは正しいですか、間違っていますか?サンプル値が負になるかどうか、それが正しい場合、それは音または無音を意味しますか?

0 投票する
2 に答える
528 参照

c# - .NETポータブルライブラリにBitConverter.DoubleToInt64Bitsがありません、置換が非常に遅い

私はC#でポータブルクラスライブラリを開発していて、ビットをに変換したいと思ってdoublelongます。この問題の最も簡単な解決策はBitConverter.DoubleToInt64Bitsメソッドを使用することですが、残念ながら、このメソッドは.NETクラスライブラリのポータブルライブラリサブセットでは使用できません。

別の方法として、次の「2パス」ビット変換を考え出しました。

私のテストでは、この式が一貫してと同じ結果を生成することが示されていDoubleToInt64Bitsます。ただし、私のベンチマークテストでは、この代替の定式化は、完全な.NETFrameworkアプリケーションに実装した場合よりも約4倍遅いことも示されています。DoubleToInt64Bits

ポータブルライブラリサブセットのみを使用して、DoubleToInt64Bits上記の私の定式化よりも迅速な置換を実装することは可能ですか?

0 投票する
1 に答える
168 参照

clr - Can BitConverter be used to reliably extract multi-byte values from an IL byte stream (as returned by MethodBody.GetILAsByteArray)?

I am working on some code that parses IL byte arrays as returned by MethodBody.GetILAsByteArray.

Lets say I want to read a metadata token or a 32-bit integer constant from such an IL byte stream. At first I thought using BitConverter.ToInt32(byteArray, offset) would make this easy. However I'm now worried that this won't work on big-endian machines.

As far as I know, IL always uses little-endian encoding for multi-byte values:

"All argument numbers are encoded least-significant-byte-at-smallest-address (a pattern commonly termed 'little-endian')."The Common Language Infrastructure Annotated Standard, Partition III, ch. 1.2 (p. 482).

Since BitConverter's conversion methods honour the computer architecture's endianness (which can be discovered through BitConverter.IsLittleEndian), I conclude that BitConverter should not be used to extract multi-byte values from an IL byte stream, because this would give wrong results on big-endian machines.

Is this conclusion correct?

  • If yes: Is there any way to tell BitConverter which endianness to use for conversions, or is there any other class in the BCL that offers this functionality, or do I have to write my own conversion code?

  • If no: Where am I wrong? What is the proper way of extracting e.g. a Int32 operand value from an IL byte array?

0 投票する
1 に答える
2026 参照

vb.net - VB.NET を使用して BitConverter.GetBytes() が特定の量のバイトのみを返すように制限するにはどうすればよいですか?

そうです:

デフォルトでは 32 ビットであるため、4 バイト要素を返します。

2バイトのように返すように制御できるようにしたい。たぶん3バイトだけ。それを制御するための組み込み関数はありますか?

shift などの使用に依存したくありません>> 8 >> 16 >> 24 >> 32

また、GetBytes() 内のデータを特定のデータ型にキャストする型に依存したくありません。

0 投票する
1 に答える
8589 参照

c# - `UInt16`をバイト配列に変換する

UInt16値をサイズ2のバイト配列に変換する方法

MSDNでいくつかのコードを見つけましたが、私の場合に使用してもよいかどうかわかりません。

私が持っているのはUInt16...それをキャストしてushort上記のコードを使用しても大丈夫ですか?!

0 投票する
5 に答える
26731 参照

r - バイナリ文字列をバイナリまたは 10 進数値に変換する

バイナリ文字列をバイナリまたは 10 進数値に変換する関数はありますか?

バイナリ文字列がある場合000101、それを に変換するにはどうすればよい5ですか?

0 投票する
4 に答える
341 参照

c# - Why does BitConverter shrink my already allocated array? (I'm trying to prevent a two's complement issue)

I am allocating an array that is intentionally bigger than the result of BitConverter.GetBytes. My goal is to leave the last byte empty so that I can prevent this number from being seen as the two's compliment and have tempPosBytes2[

When I run BitConverter.GetBytes my array tempPosBytes2 seems to shrink.

Question

What is going on under the covers, and how can I leave the trailing byte without copying the array?

I need this to work with BigInteger(byte[]) as in the following:

0 投票する
2 に答える
5660 参照

c# - int 値を 3 バイト配列に変換する (およびその逆)

ハードウェア デバイスとの間でデータを読み書きする C# WinForms アプリケーションに取り組んでいます。私のアプリケーションには、1 ~ 100000 の数字を含む複数選択リストボックスがあり、ユーザーは最大 10 個の数字を選択できます。各数値の選択が完了したら、ユーザーはボタンをクリックします。イベント ハンドラー コードは、選択した各数値を表すために 3 バイトを使用して固定サイズ (30 バイト) のバイト配列を作成し、数値が 10 未満の場合は配列をパディングする必要があります。選択されました。

例として、ユーザーが次の値を選択するとします。

現在、このコードを使用して各数値をバイト配列に変換しています。

上記の数値については、次のようになります。

BitConverter は 4 バイト配列を返してくれますが、最後のバイト配列に各数値を格納するために 3 バイトを使用するスペースしかありません。個々のバイト配列の最上位バイトを削除して、次のように最終的な配列を作成できます。

それをデバイスに書き込むとうまくいくはずです。しかし、デバイスから配列 (または同様の配列) を読み取ると、少し問題が発生します。3 バイト配列があり、このコードを使用してそれを int に変換しようとすると...

...「コレクション内のすべてのアイテムをコピーするには、Destination 配列の長さが足りません。」というメッセージが表示されます。3 バイトごとの先頭に 0x00 の最上位バイトを挿入し、それを変換できると思いますが、これを行うより良い方法はありますか?

0 投票する
11 に答える
12773 参照

.net - OverflowException なしで符号なし整数を符号付き整数に変換する方法

高値の符号なし整数 (最上位ビットを使用する値) を符号付き整数に変換できるようにしたいと考えています。この場合、値が符号付き整数型の最大値より大きくても構いません。ビット値が符号付き整数として表すものに変換したいだけです。つまり、負の数になることが予想されます。

ただし、VB.NET では、CType操作はそのようには機能しません (または や などの他の変換関数はいずれもCShort) CInteger。目的の符号付き型の最大値よりも大きい符号なし値を変換しようとするとOverflowException、負の数を返すのではなく、がスローされます。例えば:

DirectCastどちらの型も他方を継承または実装しないため、符号付き型と符号なし型の間で値をキャストするために操作を使用できないことにも言及する価値があります。例えば:

私は自分がやりたいことをする1つの方法を見つけましたが、それは不必要に醜いようです. これが私がそれを機能させる方法です:

私が言ったように、それは機能しますが、VB.NET でそれを行うためのより簡単でクリーンな方法があれば、それが何であるかを知りたいです。

0 投票する
8 に答える
18925 参照

javascript - 配列の最後の 4 バイトを整数に変換する方法は?

Uint8ArrayJavaScript で配列を使用している場合、最後の 4 バイトを取得してからそれを int に変換するにはどうすればよいですか? C# を使用すると、次のようになります。

JavaScript を使用してこれを行う不均等な方法はありますか?