VBでは、1バイトのデータ変数の範囲が0〜256となっていますが、ー128〜127までのデータについては、どうすればいいんでしょうか。
As Byte の代わりに、As System.SByte を使えば、
符合付きバイト型(を表す構造体)の定義となります。
ただし現行バージョン(VB.NET2003)では、この型を直接使って
四則演算等を行うことはできないので、あまり意味はありませんけれども。
> ー128〜127までのデータについては、どうすればいいんでしょうか。
それらのデータを、どうされたいのでしょうか?
どのように扱いたいのかがわからないので、代替案は出せませんが、
単に値として格納するだけなら、より大きなデータ型(As Integerなど)を
使えば、精度的には問題ないですよね。
ご返事ありがとうございます。2バイトのヘッダと1バイトのバイナリーデータを配列を使って読み込もうとしているところですが、バイナリーデータの範囲はー128〜127までなので、配列をsystem.sbyteで定義すればいいんでしょうか。また、system.sbyteの定義の仕方をもし可能であれば教えて頂けませんか。初心者の質問ですみません。
# "ー"(長音記号)と"−"(マイナス記号)を、正しく使い分けましょう。
> バイナリーデータを配列を使って読み込もうとしているところですが
1バイトのバイナリを、符号付き/符号無しByte型に置き換えた場合、
以下のような変換規則となります。
&H00 = 符号無し( 0) = 符号付き( 0)
&H01 = 符号無し( 1) = 符号付き( +1)
:
&H7E = 符号無し(126) = 符号付き(+127)
&H7F = 符号無し(127) = 符号付き(+127)
&H80 = 符号無し(128) = 符号付き(-128)
&H81 = 符号無し(129) = 符号付き(-127)
:
&HFE = 符号無し(254) = 符号付き( -2)
&HFF = 符号無し(255) = 符号付き( -1)
> バイナリーデータの範囲はー128〜127までなので、
であれば、普通にByte型でうけた上で、
&H00〜&H7F( 0〜127) だった場合 → 0〜+127 として処理
&H80〜&HFF(128〜255) だった場合 → -128〜 -1 として処理
のように、If文で変換するとか。
> 配列をsystem.sbyteで定義すればいいんでしょうか。
VB.NET 2005なら、符号付きバイト型(SByte)が標準でサポート
されるのですが、現行の VB.NET 2002/2003では、System.SByteで
宣言された値を数値として直接処理する事ができませんので、
あまり意味は無いかも知れません。
ツイート | ![]() |