• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:unsighed charの数値をstringに)

How to convert unsigned char numbers to string

このQ&Aのポイント
  • Learn how to convert unsigned char numbers to string in C++.
  • Use the provided code to convert the numbers and assign them to a string variable.
  • Check the example code and find out the correct way to assign the numbers to the string.

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.3

>この中に入っているのは数値です。バイナリファイルから代入した値をここに入れています。なので、hexで出すと”31”と出てくるのですね。 hexで31ならば'1'ですから「数字の1」ではありませんか? まぁ数値の49でもあるワケですが。 # ASCIIコードならば…ですが。 C#じゃなくて…CLIでしたっけ? # epistemeさんのコードは、VS2005でCLRで動きましたが…。 # この辺り、全然触っていないのでなんとも…。

diy_sunny
質問者

お礼

回答頂きありがとうございます。助かります。 今思ったのですが、 >hexで31ならば'1'ですから「数字の1」ではありませんか? >まぁ数値の49でもあるワケですが。 ># ASCIIコードならば…ですが。 ”31”というhexだから、 String^ id_data_str; id_data_str = Wireless_unit[i].wireless_id[k]; このように入れたらいけるのかなと思ったのですが、次のようなエラーが出ました。 1trunk\vc_test\setting_check\homebank\Form1.h(588): error C2440: '=' : 'unsigned char' から 'System::String ^' に変換できません。 1> 使用可能なユーザー定義された変換演算子がない、または 1> 演算型のボックス化された形式からターゲット型への標準変換は存在しません ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== やはり ToString()を使わないといけないのでしょうか?

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

その他の回答 (2)

回答No.2

using namespace System; using namespace System::Collections::Generic; int main() { const int N = 6; unsigned char id[N] = { 1, 2, 3, 4, 5, 6 }; Text::StringBuilder builder; for ( int i = 0; i < N; ++i ) { builder.Append(String::Format("{0}",id[i])); } String^ result = builder.ToString(); Console::WriteLine("[{0}]", result); }

diy_sunny
質問者

お礼

回答頂きありがとうございます。ちょっとStringBuilderっていうのを試してみたいと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

C#は触っていませんが… >Wireless_unit[i].wireless_id[0] = 1; の1は「数値」の1ですか? 「数字」の1('1')ですか? 「数値」と「数字」の違いはわかりますか? >Wireless_unit[i].wireless_id[k].ToString("X2"); は、「wireless_id[k]の値を16進数表記2桁で文字列化せよ」ということではありませんか? 上の「数字」の1であればASCIIコードで0x31になりますから、 >Wireless_ID_str02[i]->Wireless_ID_str = ”test313131313131” で"31"になるのは指定通りです。 # 元々"test"が入っていたのでしょう。 数値の1であれば、 ”test010101010101” となったでしょう。 その上で… ToString("X2") が意図したモノですか? 「数字」だったらToString()など使わずにそのまま連結できるんじゃないでしょうか? 「数値」ならToString("D1")かToString("X1")となるのでは? # ただし入っている数値が0~9の場合に限りますが。

diy_sunny
質問者

お礼

回答頂きありがとうございます。助かります。 >>Wireless_unit[i].wireless_id[0] = 1; >の1は「数値」の1ですか? >「数字」の1('1')ですか? >「数値」と「数字」の違いはわかりますか? >>Wireless_unit[i].wireless_id[0] = 1; この中に入っているのは数値です。バイナリファイルから代入した値をここに入れています。なので、hexで出すと”31”と出てくるのですね。 これをhexの”31”だったら数字の”1”として代入してくれる方法などないでしょうか?

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

関連する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; が出力されず入力待ちとなり正常に動きませんでした。 原因がわからないです。原因と解決方法のご教授願います。

  • Listジェネリッククラスのやり方がわからない。

    リストジェネリッククラスを使って、テキストファイルから取得したたくさんのデータ(数がわからない)を整理しながらWireless_ID_str02というデータの中に整理しながら入れていきたいんです。 下のプログラムでビルドはできるのですが、デバッグで見ていくと、i=20000ぐらいまで行くのですが、すべてのデータが全く同じデータで、決まって、テキストファイル内の一番最後の行のデータになってしまってました。 どうして、全く同じデータが収納されてしまうのか教えて頂けないでしょうか? どうぞ、よろしくお願いします。 List<Wireless_unit_sig^>^ Wireless_ID_str02 = gcnew List<Wireless_unit_sig^>(); Wireless_unit_sig^ Wireless_unit_sig_temp = gcnew Wireless_unit_sig(); i=0; while(( data = reader->ReadLine()) != nullptr ) { // カンマ区切りで分解 array<String^>^ split = data->Split( separator ); #if 1 Wireless_unit_sig_temp->day_name = split[0]; Wireless_unit_sig_temp->month = split[1]; Wireless_unit_sig_temp->day = split[2]; Wireless_unit_sig_temp->time = split[3]; Wireless_unit_sig_temp->year = split[4]; Wireless_unit_sig_temp->cmd1 = split[5]; Wireless_unit_sig_temp->cmd2 = split[6]; Wireless_unit_sig_temp->ID = split[7]; Wireless_unit_sig_temp->sig1 = split[8]; Wireless_unit_sig_temp->sig2 = split[9]; Wireless_unit_sig_temp->batt_mount = split[10]; Wireless_unit_sig_temp->m_rssi = split[11]; Wireless_unit_sig_temp->s_rssi = split[12]; Wireless_unit_sig_temp->version = split[13]; #endif Wireless_ID_str02->Add(Wireless_unit_sig_temp); i++; }

  • List<T> クラスでデータを入れても同じになる

    Wireless_unit_sigクラスというのにデータを入れていきたいのですが、読み込んだファイルの中にデータが20000データぐらいあるため、Listジェネリッククラスというので宣言してみました。 List<Wireless_unit_sig^>^ Wireless_ID_str02 = gcnew List<Wireless_unit_sig^>(); この時に、 Wireless_ID_str02[i]->day_name = split[0]; Wireless_ID_str02[i]->month = split[1]; Wireless_ID_str02[i]->day = split[2]; Wireless_ID_str02[i]->time = split[3]; Wireless_ID_str02[i]->year = split[4]; Wireless_ID_str02[i]->cmd1 = split[5]; Wireless_ID_str02[i]->cmd2 = split[6]; Wireless_ID_str02[i]->ID = split[7]; Wireless_ID_str02[i]->sig1 = split[8]; Wireless_ID_str02[i]->sig2 = split[9]; Wireless_ID_str02[i]->batt_mount = split[10]; Wireless_ID_str02[i]->m_rssi = split[11]; Wireless_ID_str02[i]->s_rssi = split[12]; Wireless_ID_str02[i]->version = split[13]; このようにデータを入れていこうとしたのですが、エラーが出るのですが、データを収納していく方法というのはどのようにしていけばよいのでしょうか? 作成したクラスは次のようなものです。 どうぞ、教えて頂きますよう、お願い致します。 ref class Wireless_unit_sig { private: public: String^ day_name; String^ month; String^ day; String^ time; String^ year; String^ cmd1; String^ cmd2; String^ ID; String^ sig1; String^ sig2; String^ batt_mount; String^ m_rssi; String^ s_rssi; String^ version; String^ s_rssi_fixed; public: Wireless_unit_sig() { day_name = "test"; month = "test"; day = "test"; time = "test"; year = "test"; cmd1 = "test"; cmd2 = "test"; ID = "test"; sig1 = "test"; sig2 = "test"; batt_mount = "test"; m_rssi = "test"; s_rssi = "test"; version = "test"; s_rssi_fixed = "test"; } }; }

  • String型とchar型の変換エラーです

    今晩は!またまたこの掲示板にきました。よろしくお願いします。 文字列かブランクを取り出すコードを書きましたが、 -------- char ch_check = str.charAt(i+1) ; if(ch_check ==" ") { --------- のところでString型とchar型の混合は受け入れられませんのようなエラーが出ました。 if(ch_check ==" "をboolean型でうけるのも拒否されました。 どこをどのようにしてやればよいでしょうか。 JAVA初心者です、特に文字列の取り扱いは評判通りわかり難くくないています。 よろしくお願いします。 ---------- public class Mojiretu_Blank { public static void main(String[] args) { String str = "This is a pen."; int i = 1 ; int blank_count = 0 ; while( i < (str.length()+1) ) { char ch_check = str.charAt(i+1) ; if(ch_check ==" ") { blank_count ++ ; System.out.println(ch_check); } else{} System.out.print("ブランクの数は" + blank_count + "個です。"); } } }

    • ベストアンサー
    • Java
  • unsighed char数値をstringに変換

    unsigned char ch_name[18] このように宣言した変数にバイナリファイルから読み取ったデータを入れて ch_name[0] = 0x5f ch_name[1] = 0x30 ch_name[2] = 0x61 ch_name[3] = 0x30 ch_name[4] = 0x64 ch_name[5] = 0x30 ch_name[6] = 0x66 ch_name[7] = 0x30 ch_name[8] = 0x68 ch_name[9] = 0x30 ch_name[10] = 0x73 ch_name[11] = 0x00 ch_name[12] = 0x74 ch_name[13] = 0x00 ch_name[14] = 0x75 ch_name[15] = 0x00 ch_name[16] = 0x76 ch_name[17] = 0x00 これらの数値はUnicodeで”たちつてとstuv”としてバイナリに入っていた文字列なのですが、これをString strにいれて”たちつてとstuv”として収納する方法はありませんでしょうか?

  • クラスを配列で宣言してデバッグ中にエラーが出る。

    今、"Wireless_unit_str"というクラスをWireless_ID_str02 で宣言してこれを32個分宣言して Wireless_ID_str02[i]->Wireless_ID_str = "test"; 32個分のWireless_ID_str の中に全部”test” と代入してみようとしたのですが、デバッグ最中にその文を実行しようとすると、つぎのようなエラーが出ます。 (エラー内容) ”'System.NullReferenceException' のハンドルされていない例外が HomeBank.exe で発生しました。 追加情報: オブジェクト参照がオブジェクト インスタンスに設定されていません。” 解決する方法はないでしょうか? array<Wireless_unit_str^>^ Wireless_ID_str02 = gcnew array<Wireless_unit_str^>(32); for(i=0; i < 32;i++) { Wireless_ID_str02[i]->Wireless_ID_str = "test"; } 作成したクラス”Wireless_unit_str”の内容 namespace HomeBank { using namespace System; using namespace System::Collections::Generic; /** * 明細データクラス */ ref class Wireless_unit_str { private: DateTime date; // 日付 String^ name; // 品名 String^ kind; // 分類 int money; // 金額 public: String^ Wireless_ID_str; //array<String^>^ Wireless_ID_str = gcnew array<String^>(32); public: Wireless_unit_str() { Wireless_ID_str = "test"; } }; }

  • C言語

    文字列を逆順にするプログラムを考えているのですが分かりません。(例)qwerならrewqです。入力終了は、EOFです。考えたのですが、分かりません。(コンパイルエラーです。)教えてください。宜しくお願いします。#include <stdio.h> unsigned str_length(const char str[]) { unsigned len=0; while (str[len]) len++; return (len); } void put_rstring(const char str[]) { unsigned i = str_length(str): while (i-- >0) putchar(str[i]); } int main(void) { char str[30]; int ch; printf("文字列を入力\n"); /* ----この文字列を入力したあとに、Ctrl+Zを押すと、逆から表示               で反対から、文字列が表示----*/ while (1) { ch=getchar(); if (ch==EOF) break; } printf("逆から表示"); put_rstring(str); puts("です。"); return(0); }

  • char* を渡したとき、不適切なPtrが出る問題

    こんばんは。プログラムを勉強中の学生です。 詰まった部分があり、関連しそうな部分を勉強しましたが、問題が解決しなかったので、 こちらで質問させて頂きます。 今、とあるクラスで、 class Test{ ........................................ public: int Func1(char* str,){ unsigned int n = 0; while(str != "\0"){ n += *str; str++;}          ←ここに<不適切なPtr> return n % 3; } void Func2(char* str){ int i; i = Calc(str); ..................................... ............................ } }; のように宣言し、main()関数で、 int main(){ Test test; test.Func2("ABC"); // Case1: エラーは起こらない char s[]={"ABC"}; //Case2:不適切なPtrとなる。 test.Func2( s ); } としていますが、上記のように、"ABC"を直接入れたときのみ、うまくいき、 他の方法で、char型のポインタを代入した際には、不適切なPtrと出てしまいます。 この原因を教えていただけないでしょうか? 最終的には、 cin >> s ; などのように、キーボードから入力した値(文字列)を使いたいのですが、 現段階ではmain関数で "ABC"のように書かなければならず困っています。

  • char型からのバイト数取得

    文字列から1文字ずつバイト数を取得(判定)したいのですが、 char型の文字のバイト数を取得するスマートな方法はありますか? 今考えているのは以下のようなコードです。 String str ="あA" for(int i=0; i < str.length(); i++) { char ch = str.charAt(i); StringBuffer SB = new StringBuffer(); SB.append(c); if(SB.toString().getBytes.length == 1) { //1バイトの処理 } else { //2バイトの処理 } }

    • ベストアンサー
    • Java
  • 文字列の入力、数値変換について

    入力された数字を数値に変換するプログラムを作ったのですが、うまくいきません。 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> #include <ctype.h> unsigned long long atollu(char[16]); void main(void){ unsigned long long input; char str[16]; char test[16] = "123456789012345"; int i,j=1; //atollu の動作確認・・・(1) printf("atollu test:%llu\n\n",atollu(test) ); //入力 NG: printf("%d回目 数値を入力(1~100000000000000 終了:exit)>",j); gets(str); input = atollu(str); //str と atollu(str) の確認 printf("%s %llu\n\n",str,atollu(str)); //exitと入力すると終了・・・(2) if(strcmp(str, "exit") == 0){ exit(0); } //数字以外がないか確認・・・(3) else { for( i=0; i<=15; i++){ if(isdigit(str[i]) == 0){ printf("NG\n"); for( i=0; i<=16; i++){ str[i]='\0'; } printf("moji\n"); j++; goto NG; } } } //範囲外 if(input>100000000000000 || input==0){ printf("NG\n"); printf("hani\n"); j++; goto NG; } printf("\n入力値は% llu",input ); } unsigned long long atollu(char str[16]){ unsigned long long t=0; int i,n; n = strlen(str) - 1; for( i=0; i<=15; i++){ if(str[i] == '\0'){ str[i] = 0;} else { t = t + (str[i] - '0') * pow(10.0,n-i);} } str[16] = '\0'; return t; } /* 数字を数値に変換する関数atolluは自分で作りました。 これの動作は(1)でちゃんとした値が出ているのでうまくできているようです。 (2)も"exit"と入力すれば終了するのでうまくいっています。 また、例えば "12" と入力したとき 12 9 NG moji 表示されますが、二回目以降は 12 12 NG moji となり、atollu(str)はうまく出力されている一方で、最後に「moji」と出てきているので、(3)でうまくいっていないようです。 どう直すべきなのか見当もつかないので困っています。 よろしくお願いします。

このQ&Aのポイント
  • 都内在住一人暮らしの27歳男性が、マッチングアプリや婚活パーティー、友人紹介などを試しても彼女ができない理由について考えます。
  • 趣味やコミュニケーション力の充実はもちろん重要ですが、彼女ができない人はそれ以上の努力が必要です。
  • 自己分析や自己啓発、自信の醸成、魅力的な自己プロフィールの作成など、さまざまなアプローチが必要です。
回答を見る

専門家に質問してみよう