符号付きバイト型変数を定義するには


clevo  2004-08-22 09:06:33  No: 85217

VBでは、1バイトのデータ変数の範囲が0〜256となっていますが、ー128〜127までのデータについては、どうすればいいんでしょうか。


魔界の仮面弁士  2004-08-22 22:27:07  No: 85218

As Byte の代わりに、As System.SByte を使えば、
符合付きバイト型(を表す構造体)の定義となります。

ただし現行バージョン(VB.NET2003)では、この型を直接使って
四則演算等を行うことはできないので、あまり意味はありませんけれども。

> ー128〜127までのデータについては、どうすればいいんでしょうか。
それらのデータを、どうされたいのでしょうか?

どのように扱いたいのかがわからないので、代替案は出せませんが、
単に値として格納するだけなら、より大きなデータ型(As Integerなど)を
使えば、精度的には問題ないですよね。


clevo  2004-08-23 09:14:56  No: 85219

ご返事ありがとうございます。2バイトのヘッダと1バイトのバイナリーデータを配列を使って読み込もうとしているところですが、バイナリーデータの範囲はー128〜127までなので、配列をsystem.sbyteで定義すればいいんでしょうか。また、system.sbyteの定義の仕方をもし可能であれば教えて頂けませんか。初心者の質問ですみません。


魔界の仮面弁士  2004-08-23 18:29:34  No: 85220

# "ー"(長音記号)と"−"(マイナス記号)を、正しく使い分けましょう。

> バイナリーデータを配列を使って読み込もうとしているところですが
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で
宣言された値を数値として直接処理する事ができませんので、
あまり意味は無いかも知れません。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加