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

解決


はんべい  2003-12-12 05:20:25  No: 80865

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

Dim target As Byte

target = Val(AscB("T"))

宜しくお願いします。


魔界の仮面弁士  2003-12-12 05:30:30  No: 80866

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


はんべい  2003-12-12 18:39:34  No: 80867

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

取りあえず下記の通りしてみたのですが、使い方が理解出来てないため
エラーとなる状態です。
---------------------------------------------
【その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 20:08:42  No: 80868

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

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

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


はんべい  2003-12-12 21:03:34  No: 80869

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


はんべい  2003-12-12 22:36:01  No: 80870

お世話になります。
下記の通り試してみました。
---------------------------------------------
【その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 23:37:39  No: 80871

> 但し、なぜ配列の要素なのか・・・・
文字(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-13 00:57:36  No: 80872

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

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


はんべい  2003-12-13 00:58:33  No: 80873

解決です。


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

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






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