【VB.NET】でVB6のASCB関数と同等の処理をするには?

解決


はんべい  2003-12-11 20:20:25  No: 80865  IP: [192.*.*.*]

VB.NETで以下のVB6のコードと同等の処理をしたいのですが、教えて下さい。

Dim target As Byte

target = Val(AscB("T"))

宜しくお願いします。

編集 削除
魔界の仮面弁士  2003-12-11 20:30:30  No: 80866  IP: [192.*.*.*]

System.Text.EncodingクラスのGetBytesメソッドを使ってみては如何でしょう。

編集 削除
はんべい  2003-12-12 09:39:34  No: 80867  IP: [192.*.*.*]

魔界の仮面弁士様
早速の回答ありがとうございます。
お世話になります。

取りあえず下記の通りしてみたのですが、使い方が理解出来てないため
エラーとなる状態です。
---------------------------------------------
【その1】
Dim target as Byte

target = Val(System.Text.Encoding.GetEncoding("US-ASCII").GetBytes("C"))
---------------------------------------------
【その2】
Dim target as Byte

target = Val(System.Text.ASCIIEncoding.GetEncoding("US-ASCII").GetBytes("C"))
---------------------------------------------
2つとも下記エラーとなってしまいます。

”引数'Expression'を型'Byte()'に変換することはできません。”

お手数ですが、ご教授お願いします。

編集 削除
魔界の仮面弁士  2003-12-12 11:08:42  No: 80868  IP: [192.*.*.*]

GetBytesメソッドの戻り値は、『Byte型の配列』です。
配列をValするのではなく、配列の要素を取り出すようにして下さい。

Dim data() As Byte = System.Text.Encoding.GetEncoding(文字コード).GetBytes(変換元の文字列)

[文字コード]の欄には、変換したい形式を指定してください。
例えば、"euc-jp"、"Shift_JIS"、"UTF-8" などといった文字列です。

編集 削除
はんべい  2003-12-12 12:03:34  No: 80869  IP: [192.*.*.*]

魔界の仮面弁士様
お世話になります。
回答有難うございます。
早速試してみます。

編集 削除
はんべい  2003-12-12 13:36:01  No: 80870  IP: [192.*.*.*]

お世話になります。
下記の通り試してみました。
---------------------------------------------
【その1】
Dim target as byte
Dim B_target(1) As Byte        ’文字C  1Byte用
Dim enc As System.Text.Encoding

enc = System.Text.Encoding.GetEncoding("iso-8859-1") 'ASCII CODE
B_target = enc.GetBytes("C")
target = Val(B_target(0))                            'C = 67
---------------------------------------------
【その2】

Dim target as byte

Dim data() As Byte = System.Text.Encoding.GetEncoding("iso-8859-1").GetBytes("C")
target = Val(data(0))
----------------------------------------------
一応、出来ました。
有難うございました。
但し、なぜ配列の要素なのか・・・・
また、上記の場合は、変換文字列が1Byteですが、1Byte以上の場合、For文などで要素分Val()するということでいいのでしょうか?
すみません教えて下さい。

編集 削除
魔界の仮面弁士  2003-12-12 14:37:39  No: 80871  IP: [192.*.*.*]

> 但し、なぜ配列の要素なのか・・・・
文字(Char型)や文字列(String型)は、データによって、バイト数が不定ですよね。
ですから、結果も配列になるというわけです。

たとえば、"д"という文字は、
  Shift_JIS だと 2バイト (84-74)
  UTF-8 でも 2バイト (D0-B4)
ですが、"弁"なら、
  Shift_JIS だと 2バイト (95-D9)
  UTF-8 だと 3バイト (E5-BC-81)
になりますよね。

Dim S As String = TextBox1.Text
Dim data() As Byte = System.Text.Encoding.GetEncoding("iso-2022-jp").GetBytes(S)
MessageBox.Show(System.BitConverter.ToString(data), "iso-2022-jp")


なお、先頭バイトのみ分かれば良いなら、 
   target = 〜.GetBytes(文字列)(0)
といった書き方もできます。といっても、配列要素0が無い時
(文字列が空の場合など)への対応は必要になるでしょうけれども。


> For文などで要素分Val()
列挙するのは、ForでもFor Eachでも良いでしょう。お好きなようにどうぞ。
でも、Val()については、今回の件とは無関係なのでは……?
(Val()を使う、というのは、どういう意図でしょうか?)

編集 削除
はんべい  2003-12-12 15:57:36  No: 80872  IP: [192.*.*.*]

お世話になります。
詳細な説明有難うございます。

Val()に関しては、おっしゃる通りですね。
私の理解が足りなかったようです。
Val()関数の使用については、元のVBで作成したものがそうなっていましたので・・・。
デバッグしてた際、値が同じなので今回はずしました。
いろいろお世話になりました。
また、何かの際には宜しくお願い致します。

編集 削除
はんべい  2003-12-12 15:58:33  No: 80873  IP: [192.*.*.*]

解決です。

編集 削除