- ベストアンサー
8桁文字列を16進数バイト配列に変換
お世話になります。 VB2005を使用しています。 温調器から温度データを引っ張るプログラムを作成しています。 8桁の文字列を16進数バイト配列に変換したいのですが、GetBytesでは10進数バイト配列に変換されてしまいます。 8桁の文字列又は10進数バイト配列を16進数バイト配列に変換する方法はないでしょうか? 文字列を1文字ずつ16進数に変換して配列に組み込んでいくしかないのでしょうか? よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その温度計のメーカーには問い合わせしたのでしょうか サンプルとかはないのですか たとえば "GET" といった文字列を送りたい場合 どのように変換したものを送ればいいのかなど "GET" を "474554"といった文字列に変換して送信なのか 『474554』といった文字列が必要なら dim bld as new System.Text.StringBuilder dim ss as string for each _byte as Byte in AryByte bld.Append( String.Format( "{0:X2}", _byte ) ) next ss = build.ToString SerialPort1.Write( ss, 0, ss.length ) といった具合でよさそうですが メーカのWebページなどにその機器の使い方のサンプルがあるなら 明示してみるといいかもしれませんよ
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
16進数で表示したいってことですか? 取得した配列の出力を dim ss as String dim bld as new StringBuilder for each _byte as Byte in b bld.Append( String::Format( "{0,-3:X2}", _byte ) ) next ss = bld.ToString といった具合で 配列bに取得したデータを 文字列ssに16進数として取得できます VBの中で扱う変数に 10進数/16進数の区別はありませんよ
補足
redfox63さん、回答ありがとうございます。 説明が足りませんでしたので補足します。 シリアル通信で温調器から温度データを引っ張りたいと思っています。 Dim strSend As String Dim AryByte() As Byte = Encoding.ASCII.GetBytes(strSend) SerialPort1.Write(AryByte, 0, AryByte.Length) としたのですが、温調器からの応答がありませんでした。 マニュアルには"送信コードは、16進数に変換しアスキーコード化"と書かれており、 AryByreの中身を確認すると10進数のアスキーコードが格納されていました。 送信コードを16進数のアスキーコードにしたいのです。 宜しくお願い致します。
お礼
redfoxさん、回答ありがとうございます。 メーカーに確認した所、私の勘違いだった事がわかりました。 8桁文字列を変換する必要は無く、そのまま文字列送信で良かったのです。 文字列送信する事で、データを受け取る事が出来ました。 今後は、もっと良く確認してからご相談させて頂きます。 本当に申し訳御座いませんでした。