• ベストアンサー

バイトデータの取扱いについて( .Net)

通信対象機器の仕様として1バイト単位でのデータのやりとりを行う下記の様なソースを書いたのですが、どうやっても2バイトで出力されてしまいます。 オシロでモニタしてみると0083が出力されているみたいです。ここで質問なのですがstrCmdで指定した文字列(1バイト)のみを出力させるためのコードを教えて下さい。 Dim strCmd as String strCmd="83" AxMSComm1.Output = Encoding.Unicode.GetBytes(ChrW(Val("&H" & strCmd)))

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

バイトで扱うなら、バイト配列に Dim strCmd As String Dim byt() As Byte strCmd = "83" byt = System.Text.Encoding.Unicode.GetBytes(ChrW(Val("&H" & str))) 'バイト配列の要素数確認 MessageBox.Show(byt.Length) '配列の内容確認 Dim msg As String = Nothing Dim i As Integer For i = 0 To byt.Length - 1 Step 1   msg += Hex(byt(i)) + vbCrLf Next MessageBox.Show(msg)

tamajun
質問者

補足

ありがとうございます。 追加質問があります。実際に83のみ出力させるにはどのように書けばよろしいでしょうか?教えて下さい。 AxMsComm1.Output = ? また、なぜ要素数が2つになってしまうかも教えて頂けるとありがたいです。私は余りバイトデータ・バイト配列等を扱った事が無くどういうものなのか理解出来ておりません。 その辺もご教授頂けるとうれしいです。 なぜ、動的配列byt()が byt = System.・・・(ChrW(Val("&H" & strCmd))) と言う様なインデックスを指定しない形になるのか等が 分っておりません。よろしくお願いいたします。

関連するQ&A

  • ウイザードからのVBAでクエリー名をコードでなく文字にするには

    マシンによっては、以下の2の形式でウイザードを使ったVBAで表示されるのですが 1の形のマシンがありどこの設定をすればよいか教えてください ACCESSXPです。 1.コードになっている Dim stDocName As String Dim stLinkCriteria As String stDocName = ChrW(-30163) & ChrW(23450) & ChrW(12501) & ChrW(12457) & ChrW(12540) & ChrW(12512) DoCmd.OpenForm stDocName, , , stLinkCriteria 2、日本字になっている Dim stDocName As String Dim stLinkCriteria As String stDocName = "設定フォーム" DoCmd.OpenForm stDocName, , , stLinkCriteria よろしくお願いします

  • 文字コードについて

    非常に初歩的なことですが教えてください。 漢字コード表等でみると「毎」は「6BCE」(UTF-16)表記されていますが実際のプログラム等で中身を見てみると「CE6B」となります。 これは漢字コード表を見る際には右バイトから見る決まりがあるという事でしょうか? 例えば以下の様なコードを実行すると -----以下はVB.NETのコード Dim str As String = "毎" Dim bytesData As Byte() 'UTF-8として変換 bytesData = System.Text.Encoding.Unicode.GetBytes(str) 'バイト配列を16進にて1バイト目から表示 Debug.Write(Hex(bytesData(0)) & Hex(bytesData(1))) ----- 結果は以下の様な内容になります。 CE6B

  • SJIS->UTF8->SJISコード変換について

    Windows XPでVB.NET2010で文字コード変換のプログラムを下記のように作成しました。 Dim beforeStr As String = "変換前" Dim utfEnc = System.Text.Encoding.GetEncoding(65001) Dim sjisEnc = System.Text.Encoding.GetEncoding(932) Dim beforeBytes() As Byte = utfEnc.GetBytes(beforeStr) Dim afterBytes() As Byte = System.Text.Encoding.Convert(sjisEnc, utfEnc, beforeBytes) Dim afterStr As String = sjisEnc.GetString(afterBytes) TextBox3.Text = afterStr Dim reverseStr As String = afterStr Dim reverseBytes() As Byte = sjisEnc.GetBytes(reverseStr) Dim baseBytes() As Byte = System.Text.Encoding.Convert(utfEnc, sjisEnc, reverseBytes) TextBox4.Text = utfEnc.GetString(baseBytes) SJIS->UTF8に変換して、確認のためにUTF8->SJISに逆変換してみましたが、 「変換」までは正しいのですが、最後の「前」が文字化けしてしまします。 正しくSJIS-.UTF8->SJISするには、どのように修正すればよろしいでしょうか? よろしくお願いします。

  • 「C#」文字コードの取得&文字変換

    C#で文字コードを調べるプログラムを作成しています。 そこで2つ質問をさせてください。 1つ目(文字コード調べ) TextBoxに漢字を入力して,各エンコーディングの文字コードを調べるときに,UNICDEの場合, Encoding enc_default = Encoding.GetEncoding(932); string input = tb_input.Text; byte[] byte_input = enc_default.GetBytes(input); string outtext_unicode = ""; Encoding enc_unicode = Encoding.Unicode; byte[] byte_unicode = Encoding.Convert(enc_default,enc_unicode, byte_input); foreach (byte b in byte_unicode) { outtext_unicode += string.Format("{0:X}", (int)b); } tb_output_unicode.Text = outtext_unicode; とすると,調べたい文字コードがLE(リトルエディアン)で出力されます。これをBE(ビッグエディアン)で出力されるにはどうしたらよいでしょうか? ご存知の方がいらっしゃいましたら,ぜひ教えてください。 よろしくお願いいたします。 2つ目(文字コードから文字を取得する) 上記の質問と逆のパターンで,TextBoxに文字コードを入力してもらい,人間が読める文字に変換する場合下記のようなコードを書くと, string codePoint_string = tb_output_unicode.Text; int codePoint = int.Parse(codePoint_string); char c = (char)codePoint; tb_input.Text = Convert.ToString(c); ASCIIの文字コードを入力した場合には,きちんと変換してくれるのですが,漢字の文字コードを入力すると,FormatExceptionが発生します。 何か勘違いをしているのかもしれませんが,いまいちやり方が創造できません。 こちらも,ご存知の方がいらっしゃいましたら,ご教示願います。

  • 0バイト文字の送信

    C#ですが、C/C++でも同じだと思うので、 お願いします。 たとえば、"abcde"という文字を、終端文字0バイト として、送信したいのですが、どうしたらいいので しょうか。 string mys="abcde"; byte[] mybyte=new byte[1024]; mybyte=Encoding.UNICODE.GetBytes(mys); mynetwork.Write(mybyte,0,mybyte.Length); こんな感じで、書き出すつもりですが、終端が、 0バイトには、なっていないようです。 (ちなみに、JAVAだと、文字列を、送るので "abcde\0"で、うまくいきます。バイト配列で 送る場合が、わかりません。 分かる人がいましたら、お願いします

  • VBAの構文

    Access2002を使用しています。 VBAにて、クエリの結果をメール本文に書き出したいのですが 宜しくお願いします。 【使用するクエリ】 クエリ名:果物クエリ(選択クエリ) フィールド項目:日付、注文者、発送先、電話番号、品名、数量 【現在の内容】 Private Sub コマンド1_Click() On Error GoTo Err_コマンド1_Click Dim stDocName As String Dim strsubject As String Dim strmailto As String Dim strmailto2 As String Dim strtext0 As String Dim strText1 As String Dim strText2 As String Dim strText3 As String Dim strText4 As String Dim strText5 As String Dim strtext6 As String Dim strtext7 As String Dim strtext8 As String Dim strtext9 As String strmailto = Me.電子メール_アドレス strsubject = "商品発送のお知らせ" strText1 = Me.氏名 & " 様" strText2 = "いつもお世話になります、第一青果です。" strText3 = "以下の商品を発送致しましたのでご確認下さいませ。 " strtext0 = "---------------------------------" strText4 = "何でも新鮮!" strText5 = "第一青果" strtext6 = "担当:山田 太郎" strtext7 = "mailto:info@808yaoya.net" strtext8 = "http://808yaoya.net" strtext9 = ★ここからクエリ内の「品名」と「数量」を書き出したい!★ ★以下、現在はレポートをエクセルファイルにして添付するようにしている★ stDocName = ChrW(32013) & ChrW(21697) & ChrW(12524) & ChrW(12509) & ChrW(12540) & ChrW(12488) DoCmd.SendObject acReport, stDocName, , strmailto, , , strsubject, strText1 & vbCrLf & vbCrLf & strText2 & _ vbCrLf & strText3 & vbCrLf & vbCrLf & strtext0 & vbCrLf & strText4 & vbCrLf & strText5 & vbCrLf & strtext6 & vbCrLf & _ strtext7 & vbCrLf & strtext8 & vbCrLf & strtext0 & vbCrLf & strtext9, True Exit_コマンド1_Click: Exit Sub Err_コマンド1_Click: MsgBox Err.Description Resume Exit_コマンド1_Click End Sub

  • 大小まじりの文字列より使用バイトサイズを取得する

    いつもお世話になります。さっそくですが… VB.NETにて DIM Dmy AS String Dmy="あaaあ" 当然ですがDmyのバイト単位のレングスは6となると思います。このバイト単位のレングスを取得する方法を教えて頂けませんでしょうか?(VB6ですとストリングコンバートを使用すると取得可能なのですが…) お願いいたします。

  • データ送信

    MSCommのOutPutプロパティを使用して送信します。 Dim Buffer As String  Buffer = "Dummy" MSComm1.Output = Buffer RS-232C接続をしたデバイスにデータを送信します。 このとき、受信するデバイスがいないとMSComm1.Outputステートメントの処理に約4-5秒かかります。 これは仕様ですか? MSComm1.Iutputプロパティを含めて、タイムアウトに関して参考になるドキュメントやサイトがございましたら教えていただけませんか?

  • VBでWebフォームからのCSV出力を挑戦しているが

    あるWebフォームを開発中でOracleDBからのCSVデータ出力にトライしています。 参考書と全く同様の記述をしたのですが画面を実行すると キーワードはサポートされていません : 'unicode' というエラーになってしまいます。 恐らくエンコーディングの部分が問題と思われるのですが、なにぶん素人なもので、どう修正すれば進展するのか分かりません。 どなたかご教示頂けないでしょうか。 Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs)  Dim csvString As String = makeCSVData()  Const csvFile As String = "標準原価一覧"  Response.Clear()  Response.ContentType = "application/octet-stream"  Response.AddHeader("Content-Disposition", "attachment;     filename=" & ".csv")  Response.BinaryWrite(Encoding.GetEncoding("Shift-JIS").GetBytes(csvString)) Response.End() End Sub

  • XPアップロード後のアクセスの不具合

    「新規フォームを開く」フォームボタンがXPのアップロード後「コンパイルエラー」と表示されるようになりました。 詳細は下記の通りで、1行目が全て黄色くなっていました。もしおわかりでしたら、お助けください。 よろしくお願いします。 ----------------------------------------------- Private Sub 商品コードスキャンを開く_Click() On Error GoTo Err_商品コードスキャンを開く_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = ChrW(21830) & ChrW(21697) & ChrW(12467) & ChrW(12540) & ChrW(12489) & ChrW(12473) & ChrW(12461) & ChrW(12515) & ChrW(12531) DoCmd.OpenForm stDocName, , , stLinkCriteria Exit_商品コードスキャンを開く_Click: Exit Sub Err_商品コードスキャンを開く_Click: MsgBox Err.Description Resume Exit_商品コードスキャンを開く_Click End Sub ----------------------------------------------