🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

2020閲覧

C++ アスキーコードを変換したい

1079

総合スコア14

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/12/01 02:01

C++を始めて1年も満たない初心者です。

例)0x35、0x30、0x30、0x30、0x32、0x30
上記のアスキーコードを16進のuint32_tの0x500020に変換したいのですが、
方法が思いつきません。
ご存知の方、ご教授して頂ければ助かります。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1079

2020/12/02 00:14

このような処理もできるのですね。 皆様に色々な方法を教えて頂き助かりました。
guest

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
fana

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1079

2020/12/01 06:06

まさにこの処理がしたかったです!! ありがとうございます。
1079

2020/12/01 06:57

すいません。ついでに質問したいのですが、 例)0x35、0x30、0x30、0x30、0x32、0x41 上記の様に0x41(A)がある場合に0x50002Aとすることは可能なのでしょうか?
fana

2020/12/01 07:52

コード値が 0~9 と A~F のどっちの範囲にあるかで,数値に直すところをちょいと変えてやればよいだけではないでしょうか.(回答に追記した)
1079

2020/12/01 09:08

頂いたソースにてできました。 さらっとお答えられて尊敬します。 ありがとうございます。
fana

2020/12/01 09:21

0~9に対して書かれてた処理の意味がわかっていれば,A~Fへの対応は自明な応用であろうと思います. あなたにとっても自明となるように,ちゃんと意味を捉えるようにしてください.
guest

0

ベストアンサー

単純に、strtolを16進数指定で呼び出せばいいのではないでしょうか?

投稿2020/12/01 02:08

maisumakun

総合スコア145975

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1079

2020/12/01 02:28

strtol使ってみます。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問