C++を始めて1年も満たない初心者です。
例)0x35、0x30、0x30、0x30、0x32、0x30
上記のアスキーコードを16進のuint32_tの0x500020に変換したいのですが、
方法が思いつきません。
ご存知の方、ご教授して頂ければ助かります。
よろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
char配列を string に変換して、stoi で int に変換。
C++
1#include <iostream> // cout, hex, endl 2#include <string> // stoi 3using namespace std; 4 5int main() 6{ 7 char a[] = { 0x35, 0x30, 0x30, 0x30, 0x32, 0x30 }; 8 char b[] = { 0x35, 0x30, 0x30, 0x30, 0x32, 0x41 }; 9 cout << hex; 10 cout << stoi(string(a, sizeof a), nullptr, 16) << endl; 11 cout << stoi(string(b, sizeof b), nullptr, 16) << endl; 12}
投稿2020/12/01 11:20
総合スコア8224
0
C++
1const unsigned char Code[] = { 0x35, 0x30, 0x30, 0x30, 0x32, 0x30 }; 2uint32_t val = 0; 3for( unsigned char c : Code ){ val = (val<<4) + ( c - '0' ); } 4 5std::cout << std::hex << val << std::endl;
A~Fとかも使いたいなら,まぁ,コードの範囲毎に扱えばよいのではないかと.
C++
1inline uint32_t Cvt_AsciiCode_to_Val( unsigned char code ) 2{ 3 if( '0'<=code && code<='9' )return (code - '0'); 4 if( 'A'<=code && code<='F' )return (code - 'A' + 10); 5 if( 'a'<=code && code<='f' )return (code - 'a' + 10); 6 return 0; //※ここの振る舞いは勝手に決めてどうぞ 7} 8 9int main(void) 10{ 11 const unsigned char Code[] = { 0x35, 0x30, 0x30, 0x30, 0x32, 0x41 }; 12 uint32_t val = 0; 13 for( unsigned char c : Code ){ val = (val<<4) + Cvt_AsciiCode_to_Val(c); } 14 15 std::cout << std::hex << val << std::endl; 16 return 0; 17}
投稿2020/12/01 02:30
編集2020/12/01 07:51総合スコア11990
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
まさにこの処理がしたかったです!!
ありがとうございます。
2020/12/01 06:57
すいません。ついでに質問したいのですが、
例)0x35、0x30、0x30、0x30、0x32、0x41
上記の様に0x41(A)がある場合に0x50002Aとすることは可能なのでしょうか?
2020/12/01 07:52
コード値が 0~9 と A~F のどっちの範囲にあるかで,数値に直すところをちょいと変えてやればよいだけではないでしょうか.(回答に追記した)
2020/12/01 09:08
頂いたソースにてできました。
さらっとお答えられて尊敬します。
ありがとうございます。
2020/12/01 09:21
0~9に対して書かれてた処理の意味がわかっていれば,A~Fへの対応は自明な応用であろうと思います.
あなたにとっても自明となるように,ちゃんと意味を捉えるようにしてください.
0
ベストアンサー
単純に、strtol
を16進数指定で呼び出せばいいのではないでしょうか?
投稿2020/12/01 02:08
総合スコア145975
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/02 00:14