• 締切済み

固定長String?

固定長String(String * 8など)をメンバに持つユーザ定義のストラクチャーにサーバより受信したデータをメモリコピーを行います。 この固定長StringにSJISデータを設定した時に、末尾に†が詰められていることがあります。ASCIIデータでは普通にデータが入っています。SJISデータでおかしいので単純に漢字データでおかしくなったのかな?と思ったのですが、SJIS(漢字含みデータ)でも†が詰められる時と詰められない時があります。どういった時に†が詰められるのかご存知の方教えて下さい。 そもそも、VBのString型のコード体系ってどうなっているんですか?デフォルト設定時、内部UNICODEのwindows環境下でSJISでいいんでしたっけ? 一度に2つもすいません。

みんなの回答

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

>固定長String(String * 8など)をメンバに持つユーザ定義のストラクチャー 長さが奇数の固定文字列はありますか? >受信したデータをメモリコピーを行います。 どのように?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • byte型をstring型として扱うには

    今日の質問/マイページに反映されないので、再度の質問です。 windows2000-sp4/vb6-sp5環境です。ユニコードのデータをvbで直接入出力し、vb内でstring型で扱いたいとおもっています。今のところ、vbの入出力では、自動的にsjis/unicode変換がされるので、binaryで受け取り、string型にするのかなと思っています。byte型で受け取り、APIの"MoveMemory"("RtlMoveMemory")でstring型にcopyするのかなとは思っているのですが、うまくいきません。経験不足そのものです。vbでのbyte型とstring型双方向のbinaryな変換の方法をお教えください。

  • 「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が発生します。 何か勘違いをしているのかもしれませんが,いまいちやり方が創造できません。 こちらも,ご存知の方がいらっしゃいましたら,ご教示願います。

  • 漢字に関する規定がない、文字コード体系について教えて下さい!

    文字コード体系の中で、漢字に関する規定がないものを探しています。 ご存知の方がみえたら教えて下さい。。。。  (1)EUC-JP  (2)ASCII  (3)Shift_JIS  (4)JIS  (5)Unicode (1)~(5)の中で該当する文字コードはどれになるのでしょうか? 回答お願いします! 解説も添えてもらえると助かります^^;

  • VB6.0からVB2008移植時のStringの使用方法

    初歩的な質問だと思うのですが色々調べてもわからなかったのでご教授願います。 VB6.0からVB2008にプログラムを移植しているのですが以下の部分の修正方法がわかりません。 元(VB6.0)のソース Dim strStart, strEnd As String strStart = Format( data.Start(0), "0.0" ) strEnd = Format( data.End(0), "0.0" ) Label.Caption = strStart & "-" & strEnd 'data.Start/data.EndはSingleの配列 VB2008のソース Dim strStart As String Dim strEnd As String strStart = VB6.Format( data.Start(0), "0.0" ) strEnd = VB6.Format( data.End(0), "0.0" ) Label.Caption = strStart & "-" & strEnd 'VB6.Format~はソースをUpGradeしたときに自動で変換されました VB2008のstrStartに設定する時点でエラー('System.NullReferenceException' の初回例外が DataRcvSample.exe で発生しました。)となりstrStartがNothingなのがいけないところまではわかったのですが、Newを使ってどのように設定すればいいのかがわかりません。 VB自体まだ2週間位しか触っていない初心者なのですが、急ぎの仕事で勉強する時間がなく、どうすればいいのか困っています。 修正方法をご教授願います。

  • ローカル環境で文字化けというか。

    お世話になってます。 文字化けに関するトピックは結構あり、解決策もかなりあるのですが、イマイチ自分の環境とは異なり、いろいろ試してみましたが解決しないので改めて質問させていただきます。 WinXPでmysql 5.0 phpMyAdminを入れて、クエリの中に2バイト文字(カナ、漢字すべて)を含めると下記のエラーが返ってきます。 #1406 - Data too long for column 'cname' at row 1 このとき入力した項目は"あ"で、varchar64に設定してあるcnameからいわせると入らないわけないので、おそらく文字コードの問題だと思います。 PHPMYADMINの文字コードはUTF8unicodeで、これがどうやってもSHIFT-JISにならない。 cfg[DefaultLang]="ja-sjis"になってるし、mysql側のmy.iniにも [client] default-character-set=sjis [mysql] default-character-set=sjis [mysqld] default-character-set=sjis にしてc:\WINDOWS直下においてるのですが、まだやり残してることがあるのでしょうか。 解決策何かありませんでしょうか。

  • PHP,MYSQLで検索が出来ません。sjis→ euc→sjis。

    apache 1.3.34 mysql 4.0.26 php 4.4.2 で運用しています。 HTML 入力 sjis → DATA sjis →読み出し sjis で運用していたのですが、文字化けのおかげで データを EUC にしました。 HTML(入力)sjis→EUC→HTML(読み出し)sjis に変更しました。 参考書を頼りに、変換しながらやっているのですが データが漢字(ひらがなも同じかも)の場合に検索が出来ません **他はうまくいっています***入力、表示ともに 入力時 function cnv_dbstr($string) { $string = htmlspecialchars($string); $string = mb_convert_encoding($string, "EUC-JP", "SJIS"); if (!get_magic_quotes_gpc()) { $string = addslashes($string); } return $string; } 出力時 function cnv_dispstr($string) { $string = mb_convert_encoding($string, "SJIS", "EUC-JP"); $string =nl2br($string); return $string; } 今までは下記のsqlで出来ていたのですが、この福岡市を cnv_dbstr(福岡市) にしてみたりしたのですが検索が出来なくて データが出てきません。 $sql = "select * from mem where area = 1 and cate = '福岡市'" ; $rst = mysql_query($sql, $con); どなたか、アドバイス宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • JAVAでSJISのコード変換

    JAVAで、UnicodeからSJISへのコード変換を行った上で ファイル出力を行いたいです。 たとえば文字列中にある「(1)」の文字コードが以下である時 ------------------------------- SJIS:8744 - UNICODE:2464 ------------------------------- 2464のコードを8744に変換した上でファイル出力したいです。 処理として、以下の様な形を考えているのですが 文字化けしてしまします。 ------------------------------- String source = "(1)あああああ"; 文字列の数分ループ処理↓ int code = (int) (source[x].charAt(i)); if (code == 2464) { strBuff.append(String.valueOf((char) (8744))); } ------------------------------- Unicodeで扱われているので「getByte("SJIS")」などとしているのですが 同様の結果となります。 何か良い手はないものでしょうか?

    • ベストアンサー
    • Java
  • VB.NET DLL 参照型String読込み

    VCで作成されたDLLの参照型Stringの読込みに困っております。 ご存じの方、お教え下さい。 VB6では次のような定義で、問題なく実行できます。 Private Declare Function VcToVb _ Lib "xxxxxxx.dll" Alias "VcToVb" _ (ByVal Input_DATA As String, ByVal Input_DATA_Cnt As Long, _ ByRef strData As String, ByRef Err_Cnt As Long, ByRef Err_DATA As String) As Long ------------------------------------ Out_Str , Err_Str の領域を確保 iRent = Check_VcToVb1(Input_STR, Input_Cnt, Out_STR, Err_Cnt, Err_STR) これを VB.NETで実施 Private Declare Ansi Function VcToVb _  Lib "xxxxxxx.dll" Alias "VcToVb" _ (ByVal Input_DATA As String, ByVal Input_DATA_Cnt As Int32, _ <MarshalAs(UnmanagedType.LPStr)> ByRef strData As StringBuilder, _ ByRef err_cnt As Int32, ByRef Err_DATA As StringBuilder) As Int32 (テストのため、strDataのみ) -------------------------------------- Out_Str , Err_Str の領域を確保 iRent = Check_VcToVb1(Input_STR, Input_Cnt, Out_STR, Err_Cnt, Err_STR) ******************************************* 調べた結果、VB.NETでは参照型は簡単にはいかないみたいで、StringBuilderを使用するとか、色々な方法を試しました。 結果は戻ってくるのですが、問題は DLLが文字列を返すときに、文字列内の項目区切文字として chr(0)を設定します。 このため、結果は Chr(0)の前までしか設定されません。 (VB.NETが Chr(0)を文字列の最後と判断する?) これを解決する方法はありますでしょうか。 現在は VB6で呼出す DLLを作成し、VB.NETはこれを使用していますが、 C#.Netならできるのでしょうか。 よろしくお願い申し上げます。

  • byte型を固定長で宣言したい

    シリアル通信プログラムを作っているんですが、シリアルから受信するときデータをバイト型で扱いたいのです。どうやらそのためにバイト型の変数を固定長で宣言する必要があるらしいのです。もし、これがstring型なら Dim moji*100 as stringや Dim moji as string string=space(100) などとすれば100の長さを設定できるようですが、 こういうことをbyte型の変数でする方法がわかりません。 どなたか教えてください。

  • コンボボックスのtag情報の取得方法

    VB.NET 初心者です。 コンボボックスに隠し情報としてTagにidを設定しておき 後でボタンが押下された時にそのTagからidを取得し、次の 処理を行う様にしたいと考えております。 簡単な構成は以下のようになってます。 '構造体A Public Structure A Dim id As String Dim name As String End Structure Dim Tag(1) As A Dim Item(1) As String Tag(0) = 1 Tag(2) = 2 Item(0) = "データ1" Item(1) = "データ2" ' コンボボックスに値の設定 cboData.Items.AddRange(KeyItems) cboData.Tag = TagItems ボタンが押下された時に選択されている項目のidの取得方法を 教えて頂きたいと思います。よろしくお願い致します。