|
■No77067 (まあさ さん) に返信 > 「vbFromUnicode」と同等の機能を、VB.NETで使用したいのですが、 > どうすれば良いでしょうか?
・Shift_JIS 相当のバイナリ(Byte型の一次元配列) ・Unicode 相当のバイナリ(Byte型の一次元配列) ・文字列(String)
などの相互変換が必要な場合には、既にご存知のように、 System.Text.Encoding クラスを使います。
この掲示板の左上にある「C# と VB.NET 入門」(もしくは、「C# と VB.NET のサンプル」)の リンクをクリックして、『Visual Basic .NET』の文字列 (String) に関する Tips を 参考にしてみて下さい。
…というやり取りを、先月も No76687 で交わした(というか投げっぱなしにされた)記憶が あるのですが、今回もほぼ同じ質問内容という認識で良いでしょうか?
>「LenB(StrConv(str, vbFromUnicode))」は、 >「System.Text.Encoding.GetEncoding(932).GetByteCount(str)」に変換してましたが、
その通り、「LenB(StrConv(★, vbFromUnicode))」に相当するのは、 『System.Text.Encoding.GetEncoding(932).GetByteCount(★)』ですね。
ただ、VB には「Str 関数」が存在しますので、 str という変数名は避けた方が無難かと思いますよ。(予約語では無いとは言え)
> 「str = StrConv(str, vbUnicode)」の変換方法が分かりません String 型変数にバイナリデータを保持することはできなくなりました。
バイナリデータには Dim bin() As Byte、 文字列データには Dim txt As String のように、 それぞれ適切な型で保持するように修正し、 それぞれを Encoding クラスで相互変換するようにしましょう。
> 「StrConv(LenB(StrConv(Mid(str, n, 1), vbFromUnicode)), vbUnicode)」や 上記のコードは、そもそも VB6 の時点で実装が間違っていると思いますよ。
VB6 において、『Mid(str, n, 1)』が返すデータは 「半角1文字」または「全角1文字」のいずれかとなります。 (より正確には、「空文字列」や「Null」な可能性もありますが)
という事は、それを『LenB(StrConv(★, vbFromUnicode))』した場合、その返却値は、 「Long 型の 1」または「Long 型の 2」のいずれかとなります。 ※「Long 型の 0」、「Null」の可能性もアリ。
となれば、最後の『StrConv(★, vbUnicode)』というのは、結果的には 『StrConv(1&, vbUnicode)』 『StrConv(2&, vbUnicode)』 に相当するコードになります。この vbUnicode 変換にはあまり意味が無く、 結果としては CStr 相当の働きしかしません。移植元の実装が、そもそも不適切かと。
|