8進数、16進数の表示 – プログラミング – Home

通知
すべてクリア

8進数、16進数の表示


カズ
 カズ
(@カズ)
ゲスト
結合: 25年前
投稿: 62
Topic starter  

8進数の整数を表わす文字列を受け取り、その値を関数値とする関数
16(アルファベットを含む)進数の整数を表わす文字列を受け取り、その値を関数値とする関数 を自
分でつくりたいのですが、どうすればいいのですか?


引用解決済
トピックタグ
tib
 tib
(@tib)
ゲスト
結合: 24年前
投稿: 468
 

sscanf()を使うといいでしょう。printf()で整数を8進、16進に整形することはできますよね?


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

あるいは strtoul。 おそらくこっちの方が'軽快'です。


返信引用
カズ
 カズ
(@カズ)
ゲスト
結合: 25年前
投稿: 62
Topic starter  

%o,%xを使うということですか?これも strtol も使っては、いけないと言われました。でき
ますか。


返信引用
tib
 tib
(@tib)
ゲスト
結合: 24年前
投稿: 468
 

学校の課題かなんかだったんですか?
どこまで自分で考えた上で質問していますか?
まず自分が、「与えられた10進数を8進、16進表記で書きなさい」と言われたときに何を
どうするか見えていますか?


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 23年前
投稿: 310
 

こんばんわ、RAPTです。

> その値を関数値とする関数
「関数値」ってなんでしょう? この意味がわからないのですが。
関数の引数、ってことですか?
ってゆーか、何をしたいのかが、訳分かりません。
16進数→10進数
8進数→10進数
の変換をしたいってことですか?

> %o,%xを使うということですか?これも strtol も使っては、いけないと言われました。
ん? では、「宿題」ってことですね?

「宿題」を出す意図は、アルゴリズムの勉強をして欲しい、という意図なので、
他人に聞いて解決してはいけません。自分で、どうすればいいかを考えること
に意味があります。逆に、こんな簡単なのを、自分で解かないでいては、今後
も他人に頼ってしまいがちになります。これでは意味がありません。

目的が、「16進数→10進数」、「8進数→10進数」の変換だとして、
そもそも、カズさんは、紙と鉛筆を使って、8進数、16進数から10進数に、
自力で変換することができますか? できないんであれば、まずその方法を
勉強する必要があります。できるんであれば、あとは、その処理をそのまま
コーディングすればいいだけです。

Windows98/VC++6.0std/SDK-may2002/ATL3.0/WTL7.0


返信引用
tib
 tib
(@tib)
ゲスト
結合: 24年前
投稿: 468
 

>まず自分が、「与えられた10進数を8進、16進表記で書きなさい」と
...逆でしたね。失礼。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

> %o,%xを使うということですか?これも strtol も使っては、
> いけないと言われました。できますか。

できますとも。

int oct2int(const std::string& str) {
std::istringstream stream(str);
int result;
stream >> std::oct >> result;
return result;
}

int hex2int(const std::string& str) {
std::istringstream stream(str);
int result;
stream >> std::hex >> result;
return result;
}

# 宿題なの? 使っていいよ。呼び出しくらうかも知れないけど^^;


返信引用
た
 た
(@た)
ゲスト
結合: 23年前
投稿: 16
 

>「関数値」ってなんでしょう? この意味がわからないのですが。
>関数の引数、ってことですか?
>ってゆーか、何をしたいのかが、訳分かりません。
>16進数→10進数
>8進数→10進数
>の変換をしたいってことですか?
普通「関数値」と言えば「その関数が返す値」を指しますよね。
ですから要するに strtoul の 8進数/16進数文字列専用版のようなものを書けということでし
ょう。
数値を8進数/10進数/16進数に変換ってそんなのはないですし。(←ヒント

# と書いてもきっと誰かが答えをずばり書いちゃうのでしょう・・・


返信引用
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 24年前
投稿: 280
 

基礎の関数を作るという宿題なのでしょうか。

16進数の場合

結果データを初期化
入力文字数分のループ
  結果データ*=16
  1バイトのデータ
  文字がOK?
    OKでなければ異常return
  データをASCIIからBINに変換(テーブルでも作ってください。)
  結果データに変換したデータを加算する。
ループの終了
結果データを返す

こんな感じでどうでしょう


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 23年前
投稿: 310
 

こんばんは、RAPTです。

た さん>
> 普通「関数値」と言えば「その関数が返す値」を指しますよね。
なるほど、そうなんですか。
# σ(^^)は系統的にC/C++言語をやったことがなかったせいか、
# 「関数値」って言葉を知りませんでした。

# にしても、「関数値」の型が明示されていませんが。

Windows98/VC++6.0std/SDK-may2002/ATL3.0/WTL7.0


返信引用
JUN2
 JUN2
(@JUN2)
ゲスト
結合: 23年前
投稿: 8
 

ちなみに、マルチですね。


返信引用
ユーカリ
 ユーカリ
(@ユーカリ)
ゲスト
結合: 23年前
投稿: 4
 

x進数は・・・
1.桁がひとつ増えれば(小数点が右にひとつズレたら)元のx倍になる。
2.桁がひとつ減れば(小数点が左にひとつズレたら)元の1/xになる。
というのが基本です。これはわかりますよね?

'0'という文字の文字コードは48ですから、与えられた文字から48を引けば
文字→数値の変換ができますよね?
16進数の場合は更に'A'~'F'や'a'~'f'を考慮しなければいけませんが、
これについては、とりあえず48を引いてみて、その答が10以上なら
更に7を引けば'A'~'F'に対応可能ですし、それが16を超えるようなら・・・
っとと、ご自分で考えてみましょう。
(ヒント:'A'の文字コードは65、'a'の文字コードは97です)

上記2点を踏まえれば、自ずとやるべきことが見えてくると思いますよ。


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 23年前
投稿: 310
 

で、解決したんでしょうか。。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました