掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
バイナリデータを変換するには2? (ID:83319)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>> 正確には、『Dim aaa As Byte()』です。VB5.0(SP3)を使用しています。 「Dim aaa() As Byte」なら、VB5というのも納得できるのですけれどね。 『As Byte()』という記述では、やはり.NETを連想してしまいます。(^_^;) # VB6なら、「Function aaa() As Byte()」なんていう記述もできますけど、 # VB5では使えなかったと思いますし。 > E2というバイトデータをどうしても使用したいのですが、 # お互い(質問者と回答者)の認識が、どこかずれているのかな? Shift_JISが、どういう文字コード体系であるかは御存知ですよね? バイトの並びによって、1バイト文字と、2バイト文字が混在する文字コードです。 バイトデータでいうと、 21〜7E: JIS X 0201 ローマ字 A1〜DF: JIS X 0201 片仮名 にあるものが、1バイトで1文字を表す事になっています。 そして、81〜9F, E0〜EF の範囲が 2バイト文字の先導バイトです。 これらのデータは、直後に 40〜7E, 80〜FC の範囲のデータを伴い、 2バイトで1文字を表す仕様となっています。 ……さて。元の質問に話を戻しますと。 > E2というバイトデータをShift_JISとして正しい形式にする方法は、 > ありませんでしょうか? 今回、上記に説明しました Shift_JIS の仕様を見てください。 [E2]というのは、1バイト文字ではなく、2バイト文字の一部です。 つまり[E2]1バイトだけでは、Shift_JIS の文字にはならないのです。 Shift_JISとして扱われるには、E2 40(磧)、E2 E2(粐)、81 E2(≫)など、 2バイト単位で指定される必要があります。 > また、上記の回避案などがありましたら教えていただきたいのですが。 回避策といわれても、最終的に「何がしたいのか」がさっぱりわからないので…。 やりたい事が、たとえば『E2という1バイトのデータをファイルに吐き出し、 それをバイナリエディタで見た時にも、「E2」という1バイトだけになってほしい』 というだけであれば、Shift_JIS 変換などは考えずとも、E2 というByte型の値を、 Put #ステートメントで吐き出せば済みます。この場合、String型は使いません。 あるいは『E2というデータをバイナリファイルとしては吐く事は無いが、データは Byte配列ではなく、String型のまま保持しておきたい』という事であれば、 「S = ChrB(&HE2)」などと書けば済みます。こうすると、String型変数Sには、 VB既定のUnicode文字列を示すデータではなく、バイナリデータを格納できます。 ただし、文字列型変数に、非Unicodeなバイナリデータを保存した場合は、 Mid関数, Left関数, Asc関数, Print#ステートメントなどといった 「文字列操作」を行う処理は一切使えません(データが化ける原因となります)ので、 バイト操作系の命令(AscB関数, LeftB関数など)を利用する必要があります。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.