blog/content/post/2009/05/12/2009-05-12-00001152.md

91 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 16進数を10進数に変換する
author: kazu634
date: 2009-05-12
url: /2009/05/12/_1240/
wordtwit_post_info:
- 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4589;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}'
categories:
- C
---
<div class="section">
<p>
<a href="http://d.hatena.ne.jp/asin/4320026926" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/asin/4320026926', 'プログラミング言語C 第2版 ANSI規格準拠');">プログラミング言語C 第2版 ANSI規格準拠</a>』の練習問題で「16進数を10進数に変換する関数をかけ」というものがあったので、現在挑戦中です。とりあえず1-9までの数字だけを処理すればよいのであればこんな感じになった…って、これは16進数と言わないか。。。:
</p>
<pre class="syntax-highlight">
<span class="synPreProc">#include </span><span class="synConstant">&#60;stdio.h&#62;</span>
<span class="synComment">/* htoi: 16進数を10進数に変換する */</span>
<span class="synType">void</span> htoi(<span class="synType">char</span> hex[]);
<span class="synComment">/* count: char型の配列の要素数をカウントする。*/</span>
<span class="synComment">/* argv[1]の要素数を知ろうとして「sizeof argv[1] / sizeof argv[1][0]」が必ず4になるのはなぜ */</span>
<span class="synType">int</span> count(<span class="synType">char</span> hex[]);
<span class="synType">int</span> main(<span class="synType">int</span> argc, <span class="synType">char</span> *argv[]) {
htoi(argv[<span class="synConstant">1</span>]);
<span class="synStatement">return</span> <span class="synConstant"></span>;
}
<span class="synType">void</span> htoi(<span class="synType">char</span> hex[])
{
<span class="synType">int</span> i;
<span class="synType">int</span> n = <span class="synConstant"></span>;
<span class="synComment">// とりあえずa-fのことは考慮しないよ</span>
<span class="synStatement">for</span> (i = (count(hex) - <span class="synConstant">1</span>); i != -<span class="synConstant">1</span>; i--)
{
<span class="synStatement">if</span> (i == (count(hex) - <span class="synConstant">1</span>)){
printf(<span class="synConstant">&#34;n = </span><span class="synSpecial">%d</span><span class="synConstant"> + </span><span class="synSpecial">%d\n</span><span class="synConstant">&#34;</span>, n, (hex[i] - <span class="synConstant">'0'</span>));
n = n + (hex[i] - <span class="synConstant">'0'</span>);
} <span class="synStatement">else</span> {
printf(<span class="synConstant">&#34;n = </span><span class="synSpecial">%d</span><span class="synConstant"> + (16 * </span><span class="synSpecial">%d</span><span class="synConstant">)</span><span class="synSpecial">\n</span><span class="synConstant">&#34;</span>, n, (hex[i] - <span class="synConstant">'0'</span>));
n = n + (<span class="synConstant">16</span> * (hex[i] - <span class="synConstant">'0'</span>));
}
}
printf(<span class="synConstant">&#34;</span><span class="synSpecial">%d\n</span><span class="synConstant">&#34;</span>, n);
}
<span class="synType">int</span> count(<span class="synType">char</span> hex[])
{
<span class="synType">int</span> i;
<span class="synType">int</span> num = <span class="synConstant"></span>;
<span class="synStatement">for</span> (i = <span class="synConstant"></span>; hex[i] != <span class="synSpecial">'\0'</span>; ++i)
{
num++;
}
<span class="synStatement">return</span> num;
}
</pre>
<div class="hatena-asin-detail">
<a href="http://www.amazon.co.jp/dp/4320026926/?tag=hatena_st1-22&ascsubtag=d-7ibv" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.amazon.co.jp/dp/4320026926/?tag=hatena_st1-22&ascsubtag=d-7ibv', '');"><img src="https://images-na.ssl-images-amazon.com/images/I/41W69WGATNL._SL160_.jpg" class="hatena-asin-detail-image" alt="プログラミング言語C 第2版 ANSI規格準拠" title="プログラミング言語C 第2版 ANSI規格準拠" /></a></p>
<div class="hatena-asin-detail-info">
<p class="hatena-asin-detail-title">
<a href="http://www.amazon.co.jp/dp/4320026926/?tag=hatena_st1-22&ascsubtag=d-7ibv" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.amazon.co.jp/dp/4320026926/?tag=hatena_st1-22&ascsubtag=d-7ibv', 'プログラミング言語C 第2版 ANSI規格準拠');">プログラミング言語C 第2版 ANSI規格準拠</a>
</p>
<ul>
<li>
<span class="hatena-asin-detail-label">作者:</span> <a href="http://d.hatena.ne.jp/keyword/B%2EW%2E%A5%AB%A1%BC%A5%CB%A5%CF%A5%F3" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/keyword/B%2EW%2E%A5%AB%A1%BC%A5%CB%A5%CF%A5%F3', 'B.W.カーニハン');" class="keyword">B.W.カーニハン</a>,<a href="http://d.hatena.ne.jp/keyword/D%2EM%2E%A5%EA%A5%C3%A5%C1%A1%BC" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/keyword/D%2EM%2E%A5%EA%A5%C3%A5%C1%A1%BC', 'D.M.リッチー');" class="keyword">D.M.リッチー</a>,<a href="http://d.hatena.ne.jp/keyword/%C0%D0%C5%C4%C0%B2%B5%D7" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/keyword/%C0%D0%C5%C4%C0%B2%B5%D7', '石田晴久');" class="keyword">石田晴久</a>
</li>
<li>
<span class="hatena-asin-detail-label">出版社/メーカー:</span> <a href="http://d.hatena.ne.jp/keyword/%B6%A6%CE%A9%BD%D0%C8%C7" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/keyword/%B6%A6%CE%A9%BD%D0%C8%C7', '共立出版');" class="keyword">共立出版</a>
</li>
<li>
<span class="hatena-asin-detail-label">発売日:</span> 1989/06/15
</li>
<li>
<span class="hatena-asin-detail-label">メディア:</span> 単行本
</li>
<li>
<span class="hatena-asin-detail-label">購入</span>: 28人 <span class="hatena-asin-detail-label">クリック</span>: 721回
</li>
<li>
<a href="http://d.hatena.ne.jp/asin/4320026926" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/asin/4320026926', 'この商品を含むブログ (206件) を見る');" target="_blank">この商品を含むブログ (206件) を見る</a>
</li>
</ul>
</div>
<div class="hatena-asin-detail-foot">
</div>
</div>
</div>