• 締切済み

string型のフォーマット書式指定の文字列

char s[20]; sprintf(s, "%c%c%c", 0x40, 0x41, 0x00); と同じことを string型を使って書式フォーマットしたいのですが string ss; からどうすれば、上のようなことができるのでしょうか?

みんなの回答

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

C++11なら... ss = { 0x40, 0x41 }; でよいのでは?

回答No.2

#include <iostream> #include <sstream> #include <string> using namespace std; int main() { ostringstream stream; stream << static_cast<char>(0x40) << static_cast<char>(0x41); string ss = stream.str(); cout << '[' << ss << ']' << endl; }

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

char s[20]; sprintf(s, "%c%c%c", 0x40, 0x41, 0x00); string ss(s); 「ちょっと待ておい!」と怒られるかもしれませんが、数値等を形式指定して文字列化するにはこの方法が一番手軽です。 あるいは、Boostを導入できるならば、 #include <boost/format.hpp> string ss = (boost::format("%c%c%c") % 0x40 % 0x41 % 0x00).str(); と書くことでできます。

関連するQ&A

  • String.formatの使い方

    JavaでString.formatを使いたいですが、書式指定のしかたがよくわかりません。 下記ソースの時、 java.util.MissingFormatArgumentExceptionエラーとなりますが、 どうしたらエラーとならないように正常にできますか? String format = "%1$-6.6s%2$-4.4s"; Object data = "AAAAAA, 1234"; System.out.println(String.format(format, data));

    • ベストアンサー
    • Java
  • 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

  • sprintfを用いたフォーマット文字列攻撃

    sprintfを用いたフォーマット文字列攻撃に関する質問です。 main文の中で --------------------- int main(void){ char str[50]; sprintf(str,"%s"); puts(str); } --------------------- を実行すると(null)で帰ってきます。 しかし関数呼び出しを行うと結果が変わってきます。 --------------------- void f(){ char str[50]; sprintf(str,"%s"); puts(str); } int main(void){ f(); } --------------------- これを実行すると" ・L "のような文字化けしたものに変わりました。 sprintf(str,"%s%s");と記述することによって" ・L (null) "と、本来呼び出される箇所のものが格納されています。 なぜ関数呼び出しにすると変なところを参照してしまうのか(第3引数があると勘違いしてしまうのか)教えてください。 また、これによりどのような悪影響があるのか教えてください。 自分はプログラマが意図しない箇所を参照するため攻撃者のプログラムアドレスを格納してしまう恐れがあると考えています。

  • Perlのsprintfで使われるフォーマット書式について

    Perlのsprintfで使われるフォーマット書式で例えば、 100.15という値があり、 [ 100.1500]と表示させたい場合、 %f11.4で良いのでしょうか?

    • ベストアンサー
    • Perl
  • C言語の文字列について

    C言語で文字列のヌルについて、理解があいまいな点があり、教えて欲しいのですが、以下のようにsprintfで書式し代入した際に最後は0(ヌル文字)をセットしてくれるのでしょうか?4バイト目の文字が何か知りたいです。 char temp[100];時では0で初期化されていることは保障されていませんが、大抵は0で埋まっていますが、sprintfの仕様が知りたいです。 char temp[100]; sprintf(temp, "test");とした時に 01234バイト目 test?????????????.... 話は変わりますが、以下のようにするとエラーになりましたが、 特定の位置の値をセットする方法はどのようなものがあるのでしょうか? temp[10] = (temp[10] == '0') ? (char)'1' : (char)'0';

  • 文字列の中から必要なデータを抜き出す

    VC++6.0 です。 計測機器から受信したデータ(文字列)の中から、必要なデータだけを抜き出したいのですが、 うまく抜き出すことが出来ません。アドバイスいただけませんでしょうか? 受信する文字列は 伝送制御キャラクタSTX(0x02) "文字列" 伝送制御キャラクタETX(0x03) のように受信します。 抜き出すための目印?がキーボードで入力できるような文字列の場合は過去ログにありました以下のコードで 抜き出すことが可能でした。 抜き出すための目印を 0x02 や 0x03 にする為にはどうしたら良いでしょうか?   //文字列版 #include <stdio.h> #include <string.h> #include <stdlib.h> char *cut(const char *str, const char *ss, const char *es, char *buff){ /* str の ss の次から es の前までの文字列をbuff に切り出す */ char *wk, *s, *e, *c; wk=strdup(str); if(wk==NULL)return NULL; s=strstr(wk, ss); if(s==NULL){ free(wk); return NULL;} c=s+strlen(ss); e=strstr(c, es); if(e==NULL){ free(wk); return NULL; } *e='\0'; strcpy(buff, c); free(wk); return buff; } int main(void){ const char url[]="?http://www.sample.ne.jp/";? char buff[32]; printf("//~/:%s\n", cut(url , "//", "/", buff)); return 0; }

  • boost::formatの値をstring型にコピーしたい

    boost::formatの値をstring型にコピーしたいのですが、うまくいきません。boost自体初めてで以下のサイトからダウンロードし、展開後VS2005のVCのインクルードフォルダーにboostフォルダーをまるまるコピーしただけですが・・・ http://sourceforge.net/project/showfiles.php?group_id=7586 boost 1.34.1 #include <iostream> #include <boost/format.hpp> using namespace std; using boost::format; void main(){ double x = 1.234; string str("abc"); //cout << format("%10.3f, [%16s]") % x % str << endl; // サンプルはこうでした。 // いったんstring型に入れて表示させたい。 string y; y = boost::format("%10.3f, [%16s]") % x % str; // エラー箇所 std::cout << y << std::endl; }

  • string formatについて

    フォームの値(年、月、日)を取得し、 yyyy/mm/ddのようにformatしたいのですが、 以下の場合ですと、年2007 月07 日11 としていると、 例外が発生してしまいます。(java.util.FormatFlagsConversionMismatchException) 元々4桁,2桁あるものに関しては0埋めできないのでしょうか? ご教示願います。 (String.format("%04s/%02s/%02s", form.getStart_date_y(), form.getStart_date_m(), form.getStart_date_d()));

    • ベストアンサー
    • Java
  • 文字の書式変換に関して

    初心者です。 文字の書式変換に関してよくわからないので質問いたします。 int pandegree=15; PANdegree[4]={0x00,0x00,0x00,0x00}//初期化 sprintf(PANdegree,"%04x",pandegree);//pandegreeを4桁16進数に変換して文字列PANdegreeに格納 この時点でPANdegreeに16進数4桁の値が以下のように入っています。 PANdegree[0]=0; PANdegree[1]=0; PANdegree[2]=0; PANdegree[3]=0; これをこのまま16進数として1文字ずつ別の文字列char pantiltに代入したいのですが、 char pantilt[10]={0x81,0x01,0x06,0x02,0X10,0X10,0X00,0X00,0X00,0X00,0XFF}; pantilt[6]=PANdegree[0]; pantilt[7]=PANdegree[1]; pantilt[8]=PANdegree[2]; pantilt[9]=PANdegree[3]; この時点で、PANdegree[0],PANdegree[1],PANdegree[2],PANdegree[3]に入っている文字は、%C(1文字)として認識されているのでしょうか? これを%Xとして認識させることはできませんでしょうか? まったくの初心者なので、勘違いだらけの質問かもしれませんがどうぞよろしくお願いいたします。 開発環境は Windows XP Visual Studio2005 C++ です

  • 文字列変換プログラムのポインタについて

    いかの関数は、文字列を16進文字列に変換する関数です。過去の質問を参考に自分で作りました。 動作することはするんですが、よく見るとpoとpiは領域確保していません。これってプログラム上まずいでしょうか。 char *conv( char *buff, char *str ) {   char *po;   char *pi;   for(po=buff, pi=str; *pi; pi++)   {     if(0 <= *pi && *pi <= 15)     {       sprintf(po, "%x", 0);       po++;       sprintf(po, "%x", *pi);       po++;     }else {       sprintf(po, "%x", (0x0f & (*pi >> 4)));       po++;       sprintf(po, "%x", (0x0f & (*pi % 16)));       po++;     }   }   *po='\0';   return(buff); }

専門家に質問してみよう