今,アウトルックエクスプレス上で打ち込んだテキスト(文字列)を暗号化するプログラムを組んでいます。手順としては,文字列の端からアスキーコードにして,それに数式を挟んで暗号化するものです。
ところが,アウトルックエクスプレスは一行の文字列が長すぎると,強制的に目に見えない改行マークが入るようなのです。
その改行マークが入ってくると,読み込む段階,あるいはコード変換する段階でエラーが出ます。こういった場合,どのような処理を挟めばいいのでしょうか?どなたかご教示くだされば幸いです。
一度どんなコードが追加になっているのか、バイナリエディタで調べたほうがいいでしょう。バイナリエディタは
http://www.vector.co.jp/vpack/filearea/win95/util/bin/edit/index.html
にひとやま転がってます。
通常の改行コードは16進で0D,0A(CR,LF)のはずです。
問題のコードがわかれば、バイナリでファイルオープンして、
1バイトずつリードし、(実際はバッファに一括リードして
1バイトずつ拾う)問題のコードをよみとばしながら
バイナリセーブすればOKです。
ただし、2バイト系文字コードの場合、2バイト目は
チェックからはずす必要があります。
さっそくの回答ありがとうございます。ご教示の通り,バイナリーエディタにてコードを調べてみました。教えて頂いたとおり0D0Aが入っていました。
プログラムの中では,クリップボードに文字列(改行コードを含む)をコピーして,それを暗号化手順を組んでいます。こうした場合,どのようにして0D0Aをパスさせればいいのでしょう?いろいろとすみません。教えてください。
文字コードによってかわるのですが、ShiftJISの場合だと、
1.読み込み用と履き出し用にバイト配列バッファを用意
1.読み込みバッファに文字列を取得。取得する文字列が
残ってなかったら履き出し用バッファのデータをフラッシュ
しておわり
2.ポインタを0にセット
読み込みバッファから1バイトリード
リードするデータが残ってなかったら1.へ
3.リードしたデータがCRかLFだったら、ポインタを1つ
すすめて2.へ
4.リードしたデータがShiftJIS1バイト目だったら
今のデータと次のデータを履き出しバッファにストア。
ポインタを2つすすめて2.へ
5.リードしたデータが3.4.以外のときは今のデータを
履き出しバッファにストア。ポインタを1つすすめて2.へ
履き出しバッファがいっぱいになったら適宜フラッシュ。
おおざっぱに言うとこんなかんじです。
なんか、C向きのネタですね。
「ポインタ」とかきましたが、この場合、配列の添え字用の
整数です。
ツイート | ![]() |