8進数、16進数の表示

[戻る]
カズ 2002/12/02(月) 17:45:09
8進数の整数を表わす文字列を受け取り、その値を関数値とする関数
16(アルファベットを含む)進数の整数を表わす文字列を受け取り、その値を関数値とする関数 を自
分でつくりたいのですが、どうすればいいのですか?

tib 2002/12/02(月) 17:54:39
sscanf()を使うといいでしょう。printf()で整数を8進、16進に整形することはできますよね?

επιστημη 2002/12/02(月) 18:01:15
あるいは strtoul。 おそらくこっちの方が'軽快'です。

カズ 2002/12/02(月) 20:51:30
%o,%xを使うということですか?これも strtol も使っては、いけないと言われました。でき
ますか。

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

RAPT 2002/12/02(月) 21:23:45
こんばんわ、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 2002/12/02(月) 21:33:53
>まず自分が、「与えられた10進数を8進、16進表記で書きなさい」と
...逆でしたね。失礼。

επιστημη 2002/12/02(月) 22:18:26
> %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;
}

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

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

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

アイススケーター 2002/12/03(火) 12:43:58
基礎の関数を作るという宿題なのでしょうか。

16進数の場合

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

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

RAPT 2002/12/04(水) 01:58:19
こんばんは、RAPTです。

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

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

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

JUN2 2002/12/04(水) 10:07:50
ちなみに、マルチですね。

ユーカリ [E-Mail] 2002/12/04(水) 18:34:26
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 2002/12/09(月) 03:21:25
で、解決したんでしょうか。。

古いスレッドには追加発言できません。