C言語 数値を32進数表記にする方法
スポンサーリンク
C言語で数値を16進の文字列の変換するのは、snprintf()を使えば簡単にできます。
今回は、C言語で数値を32進数表記に変換してみます。
16進数は、0からfまでで表現されます。
32進数は、0からvまでで表現します。
サンプルコード
コンパイル
今回は、C言語で数値を32進数表記に変換してみます。
16進数は、0からfまでで表現されます。
32進数は、0からvまでで表現します。
サンプルコード
#include <stdio.h>
#include <stdlib.h>
int
encode32(unsigned long n, char *buf, int len)
{
// _____________________0_________1_________2_________3_
// _____________________01234567890123456789012345678901
const char * const d = "0123456789abcdefghijklmnopqrstuv";
char *limit = buf + len - 1; // -1 は \0 の分
unsigned long base = 32;
char *p = buf, *t = buf;
char tmp;
do
{
*p++ = d [ n % base ];
if (p > limit) {
return (-1);
}
}
while (n /= base);
*p = '\0';
--p;
// 文字列を逆に並べ替える
while (t < p)
{
tmp = *t;
*t++ = *p;
*p-- = tmp;
}
return (0);
}
#define BUF 64
void
encode32test(unsigned long n)
{
char buf[BUF];
int buflen = sizeof(buf);
if (encode32(n, buf, buflen) == 0) {
printf ("%ld => %s\n", n, buf);
} else {
printf ("can not encode32 %ld\n", n);
}
}
void
encode32test_small_buffer(unsigned long n)
{
char buf[2];
int buflen = sizeof(buf);
if (encode32(n, buf, buflen) == 0) {
printf ("%ld => %s\n", n, buf);
} else {
printf ("can not encode32 %ld\n", n);
}
}
int
main (int argc, char *argv[])
{
encode32test (0UL);
encode32test (10UL);
encode32test (16UL);
encode32test (31UL);
encode32test (32UL);
encode32test (33UL);
encode32test (34UL);
encode32test (64UL);
encode32test (1023UL);
encode32test (1024UL);
encode32test (30000UL);
encode32test (65545UL);
encode32test_small_buffer (31UL); // v\0 になる
encode32test_small_buffer (32UL); // エラーのテスト 10\0 は入らない
encode32test_small_buffer (33UL); // エラーのテスト
exit (EXIT_SUCCESS);
}
コンパイル
cc -Wall encode32.c
実行方法
./a.out
実行結果
0 => 0 10 => a 16 => g 31 => v 32 => 10 33 => 11 34 => 12 64 => 20 1023 => vv 1024 => 100 30000 => t9g 65545 => 2009 31 => v can not encode32 32 can not encode32 33
スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12