タイトル : Re^2: 配列時の書き方に関して 投稿日 : 2013/09/25(Wed) 21:56 投稿者 : ミスターK
丁寧な解説、回答ありがとうございました。 大変参考になりました。 > > ※の行を以下のように書き換えました > 対応する関数が無いからとはいえ、VB6 の MidB$ 関数を、VB.NET の Mid 関数に > 置き換えてはいけません。VB6 の Mid$ 関数を VB.NET Mid 関数に置きかえるなら良いですが。 > > > > →astrDat(lngIx) = System.Text.Encoding.Unicode.GetBytes(Mid(strData, .lngPosB, .lngLenB)) > bytDataCnv と strData の関係を説明してもらわないと、意図が読み取れないです。 > > VB6 の方は、「Shift_JIS バイナリ(の一部)を、文字列に変換するコード」なのに、 > VB.NET の方は、「文字列(の一部)を、Unicode バイナリに変換するコード」に > 置き換えているようですが、そもそも gf_GetValue 関数で何をさせたいのでしょうか? > > > > Dim lngLenB As Integer > 変数名のプレフィックスが型名と一致していません。 > 典型的な「システムハンガリアンの弊害」ですね…。 > > > > VB6.0のプログラムをVB.NETへ移行しているのですが > 変数宣言が「lngLenB」「lngPosB」と書かれているも関わらず、 > コードでは「.lngPosB」「.lngLenB」という With 的表現が使われて > いることから推察するに、これは実際のコードでは無いのですよね。 > > > とりあえず、 > > ・bytDataCnv は Shift_JIS のバイナリ を格納した Byte 型の一次元配列 > ・lngPosB は、バイナリの切り出し開始位置(1〜)を示す Long 値 > ・lngLenB は、切り出すバイト長(0〜)を示す Long 値 > ・MidB$ 関数を使って、Shift_JIS バイナリの一部を切り出す > ・astrDat(lngIx) には、切り出したバイナリを Unicode 変換して String として格納する > > という意図だと推察しますが、それならば > astrDat(lngIx) = System.Text.Encoding.GetEncoding(932).GetString(bytDataCnv, lngPosB - 1, lngLenB) > と書いてみてください。 > > 「.GetEncoding(932)」の部分は「.GetEncoding("Shift_JIS")」とも書けます。 > (.Default を使う事もできますが、その場合、日本語OS以外での動作が異なります) > > bytDataCnv が シフトJIS のバイナリなので、Encoding も Shift_JIS を指定しています。 > bytDataCnv が UTF-16 のバイナリの場合は、Encoding を Unicode にしてください。 |