ファイル内のパリティビットを削除するには、delphi(6)の方法がありますか?この場合、9eビットごとに。あなたのファイルを想定すると乾杯 アーネストパリティビット
Q
パリティビット
1
A
答えて
4
は9ビットのブロックを含む長いビットストリームである、あなたは(つまり、すべての9番目のビットを落とす)が、8ビットのブロックと同じストリーム出力したいです。
一度に9バイト(72ビット= 8、9ビットのブロック)を読み取り、次いで、8個の8ビットのブロックにそれらを置くためにビットシフトを使用することができます。
あなたは9バイトの倍数ではないので、これは単なる目安であるファイルを処理するためにいくつかの特別な処理が必要になります。
procedure TForm1.Button1Click(Sender: TObject);
var
FSIn: TFileStream;
FSOut: TFileStream;
InBuffer: array[0..8] of Byte;
OutBuffer: array[0..7] of Byte;
X: Integer;
BytesRead: Integer;
BytesToWrite: Integer;
begin
FSIn := TFileStream.Create('Input.dat', fmOpenRead);
FSOut := TFileStream.Create('Output.dat', fmCreate);
try
for X := 1 to FSIn.Size div 9 do
begin
FillChar(InBuffer[0], 9, 0);
BytesRead := FSIn.Read(InBuffer[0], 9);
OutBuffer[0] := InBuffer[0];
OutBuffer[1] := (InBuffer[1] and 127) shl 1 + (InBuffer[2] and 128) shr 7;
OutBuffer[2] := (InBuffer[2] and 63) shl 2 + (InBuffer[3] and 192) shr 6;
OutBuffer[3] := (InBuffer[3] and 31) shl 3 + (InBuffer[4] and 224) shr 5;
OutBuffer[4] := (InBuffer[4] and 15) shl 4 + (InBuffer[5] and 240) shr 4;
OutBuffer[5] := (InBuffer[5] and 7) shl 5 + (InBuffer[6] and 248) shr 3;
OutBuffer[6] := (InBuffer[6] and 3) shl 6 + (InBuffer[7] and 252) shr 2;
OutBuffer[7] := (InBuffer[7] and 1) shl 7 + (InBuffer[8] and 254) shr 1;
if BytesRead < 9 then
begin
// To do - handle case where 9 bytes could not be read from input
BytesToWrite := 8;
end else
BytesToWrite := 8;
FSOut.Write(OutBuffer[0], BytesToWrite);
end;
finally
FSIn.Free;
FSOut.Free;
end;
end;
+0
+1これはより効率的に(ポインタ、asmなど)行うことができますが、これは極端なケースでは大丈夫です。 –
+0
9バイトを読み取ることができない場合を処理するために、各読み取りの前にInBufferをクリアする必要があるように見えます。 – skamradt
0
関連する問題
- 1. パリティビットの短所
- 2. パリティビットとエラー検出
- 3. Cでパリティビットを追加する
- 4. DESKeyは無効なパリティビットを保持しますか?
- 5. デジタル・エレクトロニクスにおけるパリティ・ビットの使用はどのようなものですか?
- 6. 誤り検出符号とハミング距離
- 7. Matlabのハミングコード
- 8. パリティチェックにRS-232の開始ビットと停止ビットが含まれていますか?
- 9. シリアル接続でデータが破損しました
- 10. Javaを使用してシリアルシリアルデータを読み取る方法は?
- 11. トリプルDESキーまたは初期値の1ビットを変更すると、異なる暗号化データが得られないのはなぜですか?
- 12. ラズベリーパイ3 with wirpingpi - uart doesnt work
- 13. シリアルポートの設定を自動的に検出しますか?
- 14. 9ビットシリアルプロトコルのBCDフォーマット
- 15. Crypto ++ DESの実装とキーの長さ
- 16. パリティサポート付き仮想シリアルポートの作成を可能にするアプリケーション
- 17. 文字配列内の値の複数の出現を検索し、出現回数をリストします。 VC++
- 18. MinimalModbus IOエラー
- 19. cでシリアルポートからフルパケットデータを読み取る方法
- 20. JCEを使用した3DES/DES暗号化 - 受け入れ可能な鍵の生成
- 21. xor操作を正しく行う方法は?
- 22. IEC 62056-21、gsm接続を介してプロトコルを実装
本当にビットを削除したいのですか、それとも*クリアするのですか? 9eの意義は何ですか? 158番目のビットがすべてパリティビットであることを意味しますか?それは奇妙に思える。 –
私は彼が9番めのビットを意味すると思う。 (9eはフランス語とオランダ語で9位です)。 – Martijn
ClassesユニットはTBitsクラスを定義し、メモリーブロック内のビットをアドレス指定するためにいくつかのトリックを使用します。少し複雑ですが、何が起こっているのか分かっていれば、同様のトリックを使用するコードを作成するよう促すかもしれません。 –