• ベストアンサー

unsigned char SJis[2]からstd::stringに変換

開発環境は VC++ 2008 Express Edition あるDLLの関数で戻り値としてShiftJISの1文字が格納された unsigned char SJis[2] が返され,これを呼び出し側のプログラムで使っている文字列 std::string str に順に追加していこうと思っています. そこで, unsigned char tmpSJis[3]; tmpSJis[0] = SJis[0]; tmpSJis[1] = SJis[1]; tmpSJis[2] = '\0'; str += std::string(tmpCode); というコードを書いてループさせたのですが, error C2440: '<function-style-cast>' : 'unsigned char *' から 'std::string' に変換できません。 というエラーが出てしまいうまく変換できません. これを解決する方法はありませんか?

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

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

str.append(SJis + 0, SJis + 2); で解決しませんか?

dodon07
質問者

お礼

回答ありがとうございます. ただ,このコードの意味はよく分かりませんでしたが, 試してみたところうまく動作しました. 意味は自分で調べてみようと思います. とてもシンプルなコードで書けたため,良回答20ptにしました(^-^)

その他の回答 (1)

回答No.1

エラーコードそのままです。std::stringと"unsigned"なcharは互換性が無いです。 代わりにtmpSJisをcharで宣言すればOK。コピーするときはmemcpyで。 あと、   str += std::string(tmpCode); この部分はこう書いても結果は同じになります。   str += tmpCode;

dodon07
質問者

お礼

回答ありがとうございます. 教えていただいたコードを試したところ,うまく動作することが確認できました. 勉強になりました. 良回答10ptにしました(^-^)

関連するQ&A

  • string から unsigned char へ

    unsigned char* uchar_string(string* str) { int length = str->length(); const char* cchar = str->c_str(); unsigned char* uchar = new unsigned char[length+1]; for(int i=0; i=length; i++) { uchar[i] = (unsigned char)cchar[i]; } return uchar; } int main() { string str; cin >> str; unsigned char* uc; uc = uchar_string(&str); cout << uc; delete uctest; return 0; } このようにしたところ、cout << uc; が出力されず入力待ちとなり正常に動きませんでした。 原因がわからないです。原因と解決方法のご教授願います。

  • String型をchar型配列にしたい

     VC++2005ExpressEdition + PlatformSDKを使用しています.  String型をchar型配列に変換したいと思っています.  自分なりに調べてみたのですが, > String^ str = gcnew String("test"); > char chr[5]; > chr = str->ToCharArray(); などとしても次のようなエラーが出ます. > error C2440: '=' : 'cli::array<Type,dimension> ^' から 'char [5]' に変換できません。  String型からchar型配列への変換はどのようにすればいいのでしょうか.

  • c++のstd::stringについて

    VC++2008でフォームアプリケーションを作成しています。 シリアルポートから受け取った文字列の一部を抜き出して処理をするため,VBではmid関数に相当するような機能として,std::stringを使用しようとしています。 しかし, std::string str("ABC" ,1,2); とした場合は『BC』が問題なく返ってきましたが, std::string str(recieveddata ,1,2); のように,文字列の部分を変数にしたら,ビルドエラーになってしまいます。(ポインタ?を理解する必要があるのでしょうか?) どのようにすれば,VBのmid相当の機能を実現できるでしょうか?

  • double型をstd::string型に変換するには...

    VC++ .NETです。 double型をstd::string型に変換するには どうすれば、よいですか?

  • キャストの仕方(std::stringをconst char*へ)を教えてください。

    c++で作成したものをコンパイルしたところ、 下記のようなエラーメッセージが表示されました。 cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int stat(const char*, stat*) 自分の解釈では、 stat関数の第1引数がconst char*なのに、 プログラムの中では  #include <sys/types.h>  #include <sys/stat.h>  using namespace std;   :  string aaa;   :  struct stat st;  if(stat(aaa,&st)!=-1){・・・   : という感じで記述しているので、 型が変換できない という感じのことを言っているのかなぁ・・・? と思っているのですが、間違いですか? また、間違えていないとしたら・・・、 このstringで宣言しているaaaをchar*(?)にキャストする方法 と言いますか、このエラーを解決する方法を教えてください。 毎度のことですが、理解不十分で、質問の意味が通じにくいかも しれませんが、どうか宜しくお願いいたします。m(_ _)m

  • const unsigned char *Ptn

    度々お世話になってます。VC++2010、MFC、ユニコードを使う設定で、ワイルドカードを用いたLike処理が使いたいです。 正規表現までは、望んでいません。 それで、過去ログを見てみましたが、まだ分かりませんでした。 ◆ワイルドカードを用いた文字列検索 http://okwave.jp/qa/q287644.html を使いたいです。 一応、リンク先のソースコードを載せておきます。 _________________________________________________________________________________________________ int StrMatchMBS( const unsigned char *Ptn, const unsigned char *Str ) {   switch( *Ptn )   {     case '\0':       return (_mbsnextc(Str)=='\0');     case '*':       return StrMatchMBS( _mbsinc(Ptn), Str ) || (_mbsnextc(Str)!='\0') && StrMatchMBS( Ptn, _mbsinc(Str) );     case '?': return (_mbsnextc(Str)!='\0') && StrMatchMBS( _mbsinc(Ptn), _mbsinc(Str) );     default:       return (_mbsnextc(Ptn)==_mbsnextc(Str)) && StrMatchMBS( _mbsinc(Ptn), _mbsinc(Str) );   } } _________________________________________________________________________________________________ int KeywordDlg::StrMatchMBS( const unsigned TCHAR *Ptn, const unsigned TCHAR *Str ){ としたところ、 エラー 4 error C2050: switch 式の結果は、整数値になりませんでした。 エラー 3 error C2065: 'Ptn' : 定義されていない識別子です。 ・・・のエラーがでます。 _________________________________________________________________________________________________ int KeywordDlg::StrMatchMBS( const TCHAR *Ptn, const TCHAR *Str ){ としたところ Ptn と Str の所で、赤い波線となり、 エラー 2 error C2664: '_mbsinc' : 1 番目の引数を 'const TCHAR *' から 'const unsigned char *' に変換できません。(新しい機能 ; ヘルプを参照) _________________________________________________________________________________________________ ↓この方の質問のままなのですが、具体的に どう書けばいいのか?分かりません。 ◆UNICODE化のための書き換え http://okwave.jp/qa/q6966243.html _tcsrchr もどこで使えばいいのか分かりません。 ポインターの記述を完全に理解していないせいで、分からないのでしょうか? すみませんが、もう少し、補足して頂くとうれしいですm(_ _)m

  • VC++ std::stringからLPCWSTRに変換

    Visual C++ 2008を使用してTextBoxからの値(System::String)をmciSendString(LPCWSTR)に渡したいと思っています。 そこで自分はSystem::Stringをstd::stringに変換しそれから渡そうと思っているのですが・・・ 『error C2664: 'mciSendStringW' : 1 番目の引数を 'std::string' から 'LPCWSTR' に変換できません。』 のようにエラーが出ます。 当然そのまま与えてるので出るのは当たり前なのですが、キャストや変換の仕方が分からず調べ様にも困っている次第です。 C++に今回始めての挑戦で、右も左も分からないのですが、もしよろしければご指南頂けませんでしょうか?

  • oracle10g eucのblobをsjisのcharに変換したい

    oracle10g eucのblobをsjisのcharに変換したい oracle10gでblob型でeuc_jpの文字列を格納しています これをshift_jisのvarchar2に変換したいのですが 無理でしょうか? utl_raw.cast_to_nvarchar2では文字化けしました

  • char型配列をString型にしたい

     VC++2005ExpressEdition + PlatformSDKを使用しています.  char型配列をString型にしたいと思っています(MessageBoxで表示するため).  int型ならば, > String^ out = String::Format("{0}", i ); > MessageBox::Show(out); などとできます.  下のアドレス(*1)のNo.2の答えにあるように > char ss[256]; > String^ out; > out=ss; とすると > error C2440: '=' : 'char [128]' から 'System::String ^' に変換できません。 なるエラーが出ます(S を大文字にしたりハットを付けたりしています).  char型の配列のString型への変換はどのようにすればいいのでしょうか. (*1)http://oshiete1.goo.ne.jp/kotaeru.php3?q=479640

  • String型からChar配列への変換は可能?

    String型から例えばcharの配列に変換するという事はできるでしょうか String str="OKwave"だとすると char c[]={'O','K','w','a'.'v','e'}; というような感じにしたいのですが、流石に不可能でしょうか。 もし出来ないなら、代替方法とか教えていただけるとありがたいです。 とりあえず、文字を一つ一つに分けたいのです・・・ Javaはまだ初心者で、質問内容も初歩的なものだと思いますが、よろしくおねがいします。

    • ベストアンサー
    • Java

専門家に質問してみよう