問題タブ [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 投票する
8 に答える
23834 参照

c# - C# ジェネリック: ジェネリック型を値型にキャストする

指定された型 T の値を保存するジェネリック クラスがあります。値は、int、uint、double、または float にすることができます。ここで、値のバイトを取得して、特定のプロトコルにエンコードしたいと考えています。したがって、メソッド BitConverter.GetBytes() を使用したいのですが、残念ながら Bitconverter はジェネリック型または未定義のオブジェクトをサポートしていません。そのため、値をキャストして GetBytes() の特定のオーバーロードを呼び出します。私の質問: 汎用値を int、double、または float にキャストするにはどうすればよいですか? これは機能しません:

一般的な値をキャストする可能性はありますか? または、バイトを取得する別の方法はありますか?

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

c# - バイト [8] からビット [64] の解析

C# を使用してバイナリ ファイルを読み込んでいます。ファイルタイプの仕様によると、1バイトに6つのものがパックされています[8]。ただし、最初の変数は0〜19ビットです。2 番目の変数は 20 ~ 39、3 番目は 40 ~ 59、4 番目は 60 ~ 62、63 ビットはブール値です。これらのビットを意味のあるデータに変換するにはどうすればよいですか? これらの変数はすべて、最後のビットを除いて uint です。

0 投票する
0 に答える
651 参照

vb.net - VB.net TCP ストリーミング バイト、算術演算でオーバーフローが発生する

私はこれに数日間取り組んでおり、車輪を回転させているところです。これは、mikrotik ルーターの API に接続するための vb.net コードの一部です。彼らのwikiで提供されていましたが、ポップアップするエラーがあり、答えを見つけるのに苦労しています.

ほとんどの場合、これを実行するとすべて正常に動作しますが、応答が長すぎるとエラーが発生します。少なくともそれが原因だと思います。コードが到達した場合

「算術演算でオーバーフローが発生しました」というメッセージが表示されます

これがどのように機能しているのかはわかりますが、ここで何が起こっているのかを正確に把握していません. tcpStream.ReadByte() は 143 を返しています

tmp(3) は 128 を返しています

BitConverter.ToInt32(New Byte() {tcpStream.ReadByte(), tmp(3), 0, 0}, 0) ^ &H8000 は「Infinite」を返していますが、これが問題だと思います。

完全なコードに興味がある場合は、ここで見つけることができます: http://wiki.mikrotik.com/wiki/API_in_VB_dot_NET

何が悪いのか誰も教えてくれないのなら、このコードの塊が何をしているのか知りたいだけです...コードにコメントしてくれたらいいのに= P

どうもありがとうございました

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

hash - BitConverter.IsLittleEndian よりも .NET でエンディアンを検出する良い方法はありますか?

.NET フレームワークが、要求された適切なエンディアンでバイト配列を明示的に返すだけの BitConverter クラスから関数/メソッドを提供するだけでよかったと思います。

私は他のコードでこのようないくつかの機能を実行しましたが、より短いより直接的な方法はありますか? (この概念は、PBKDF2、Skein、HMAC、BLAKE2、AES などを含むさまざまな暗号およびパスワード派生コンテキストで TON として使用されるため、効率が重要です)

また、他の人がこの質問に苦労していることもわかりましたが、まだ良い答えを見ていません:( 「エンディアン」に対処する方法

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

c# - C# の BitConverter.Int64BitsToDouble に関するセキュリティと安定性の問題

ネットワーク経由でデータをパケット化するためのカスタム逆シリアル化システムを作成しており、次の方法で double をシリアル化しています。

このEncodeInteger関数は単に整数をタグ付き文字列に変換するだけなので、逆シリアル化コードは正しいデータ型を取得したことを認識します。

反対側では、次のようにデシリアライズしています。

繰り返しDecodeIntegerますが、タグを削除し、値が long の範囲内にあることを確認してから、long にキャストします。何か問題が発生した場合、例外がスローされるだけなので、これは安全です。

私の懸念の理由は、参照ソースに足を踏み入れた後、この直接の安全でないキャストが表示されることです。

私が予見する問題は、long のがネットワークを経由するため、任意に変更できることです。値が勝手に変更されることは気にしていませんが、無効な基になるdouble表現が送信された場合に CLR で問題が発生する可能性があります。

有効な にマッピングされない潜在的なlong値があるかどうかはわかりませんが、ある場合、何が表示される可能性がありますか? CLR がクラッシュして、サービス拒否状態が発生する可能性はありますか? または、キャッチできる例外はありますか?double

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

c# - byte[] を配列の問題に変換する

このコードを確認してください

これは奇妙な結果をもたらします。b は { 0xBF, 0x04, 0xCE, 0xFF } になります

f の値が NaN だからだと思います。私がこの質問をしている理由は、Marsal を使用して、バイトのストリームをフロートを含む構造体に変換するためです。I スワップ エンディアン

問題は、フィールドに到達したときにすでにめちゃくちゃになっていることです(上記の例のように)

何か案は?

ありがとう!