VB.NETで以下のVB6のコードと同等の処理をしたいのですが、教えて下さい。
Dim target As Byte
target = Val(AscB("T"))
宜しくお願いします。
System.Text.EncodingクラスのGetBytesメソッドを使ってみては如何でしょう。
魔界の仮面弁士様
早速の回答ありがとうございます。
お世話になります。
取りあえず下記の通りしてみたのですが、使い方が理解出来てないため
エラーとなる状態です。
---------------------------------------------
【その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()'に変換することはできません。”
お手数ですが、ご教授お願いします。
GetBytesメソッドの戻り値は、『Byte型の配列』です。
配列をValするのではなく、配列の要素を取り出すようにして下さい。
Dim data() As Byte = System.Text.Encoding.GetEncoding(文字コード).GetBytes(変換元の文字列)
[文字コード]の欄には、変換したい形式を指定してください。
例えば、"euc-jp"、"Shift_JIS"、"UTF-8" などといった文字列です。
魔界の仮面弁士様
お世話になります。
回答有難うございます。
早速試してみます。
お世話になります。
下記の通り試してみました。
---------------------------------------------
【その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()するということでいいのでしょうか?
すみません教えて下さい。
> 但し、なぜ配列の要素なのか・・・・
文字(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()を使う、というのは、どういう意図でしょうか?)
お世話になります。
詳細な説明有難うございます。
Val()に関しては、おっしゃる通りですね。
私の理解が足りなかったようです。
Val()関数の使用については、元のVBで作成したものがそうなっていましたので・・・。
デバッグしてた際、値が同じなので今回はずしました。
いろいろお世話になりました。
また、何かの際には宜しくお願い致します。
解決です。
ツイート | ![]() |