トップページ⇒tech
29コメント8KB

16進数を10進数に・・・・・

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん NGNG
C言語演習で”入力された16進数を10進数に変換するプログラムを
かけ”ってあるんだけど、どうすんの??

0002デフォルトの名無しさんNGNG
たしか、Cにそんな関数なかったっけ?
hextoi() みたいな??
0003デフォルトの名無しさんNGNG
とりあえず、単発の質問は止めましょう。
別の質問スレッドで聞いてみましょう。

・お兄ちゃんの宿題、私が答えるよ
http://piza.2ch.net/test/read.cgi?bbs=tech&key=982853418
・C言語なら、俺に聞け!
http://piza.2ch.net/test/read.cgi?bbs=tech&key=979529893
・ウルトラ初心者の質問スレ
http://piza.2ch.net/test/read.cgi?bbs=tech&key=986871745
0004デフォルトの名無しさんNGNG
if(char[i] == 'a','b','c','d'.....
ってやっていくしかないんじゃない?

日頃そんなことしないから分からん。

0005デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>
main()
{
char s[BUFSIZ];
while (fgets(s, sizeof(s), stdin) != NULL)
printf("%d\n", strtol(s, NULL, 16));
}

学校の宿題なら、この答えを出すとたぶん0点をもらえます。
0006デフォルトの名無しさんNGNG
ってことで、strtol() のソースをコピペすればいいんじゃ?

0007デフオルトの名無NGNG
void f(int x) {
if (x < 0) { putchar('-'); f(-x); return; }
if (x > 10) f(x / 10);
putchar('0' + x % 10);
}
int main() { f(-12345); putchar('\n'); }
0008デフォルトの名無しさんNGNG
むかしむかし、あるところに

http://mentai.2ch.net/test/read.cgi?bbs=prog&key=../kako/961/961762322
0009デフォルトの名無しさんNGNG
↑ここに載ってたこの↓やり方好きだな〜

const char *const binary[] = {
"0000000000000000",
"0000000000000001",
"0000000000000010",
...
"1111111111111111"};
0010デフォルトの名無しさんNGNG
皆さんどうもありがとうございました!
やっぱ文系の私にはC言語のクラスはきつすぎるみたい・・・

0011 NGNG
最初は誰でもそんなもんだよ。
応用力が差に繋がるかな?
0012デフォルトの名無しさんNGNG
7が理解出来ない俺は駄目人間・・・
0013デフォルト名無NGNG
睡眠時間他、健康状態がプログラムの
読解力に激しく影響すると思われ。

0014デフォルトの名無しさんNGNG
7は教科書レベルだろ。
睡眠とってなくても、病気でもわかると思うが。
0015デフォルトの名無しさんNGNG
>>14
そうやってけなして何になる?
0016デフォルトの名無しさんNGNG
url エンコードするときに、
switch( c)
{
case '1':
return 1:
...
case 'A':
case 'a':
return 10;
}

 とかやってる・・。実は、これが一番速いぽいからなんだけど。
0017デフォルトの名無しさんNGNG
7は再帰ですか?
0018デフォルトの名無しさんNGNG
>>16
コンパイラ次第だけどね。ジャンプテーブルに展開されてるんじゃ?
0019デフォルトの名無しさんNGNG
>>1と>>7って、なんか関係ある?
0020デフォルトの名無しさんNGNG
>>16 こんなのどう? ただし、誤入力に対する対処が足りてないけど。

#include <stdio.h>
int getValue(char c)
{
  int result;
  if((c & 0xf0) == 0x30)
    result = c & 0x0f;
  else if((c & 0xf0) == 0x40 || (c & 0xf0) == 0x60)
    result = (c & 0x0f) + 9;

  if(result < 0 || result > 16) return -1; /* ERROR */
  else return result;
}

int main()
{
  printf("%d ", getValue('0'));
  printf("%d ", getValue('1'));
  printf("%d ", getValue('9'));
  printf("%d ", getValue('A'));
  printf("%d ", getValue('F'));
  printf("%d ", getValue('a'));
  printf("%d ", getValue('f'));
 
  return 0;
}
/* 結果: 0 1 9 10 15 10 15 */
0021デフォルトの名無しさんNGNG
>>19
ダウン症の子に「お前馬鹿?」って聞くような事をしてはいけません。
002216じゃないけどNGNG
>>20
int getValue(char c)
{
  int result;
  if((c & 0xf0) == 0x30)
    result = c & 0x0f;
  else if((c & 0xf0) == 0x40 || (c & 0xf0) == 0x60)
    result = (c & 0x0f) + 9;
  else
    return -1;

  if(result < 0 || result >= 16) return -1; /* ERROR */
  else return result;
}
0023デフォルトの名無しさんNGNG
int Hex(char Hex)
{
 
  if('0' <= Hex && Hex <= '9') return Hex - '0';
  if( 'A' <= Hex && Hex <= 'Z') return (Hex - 'A') + 0x0A;
  if( 'a' <= Hex && Hex <= 'z') return (Hex - 'a') + 0x0A;

  return -1;
}
0024デフォルトの名無しさんNGNG
>>23
なんで<='z'なの?
<='f'じゃないの?
0025>23NGNG
isxdigit使えや
0026デフォルトの名無しさんNGNG
みんな1文字の16進数を引数にしてるけど、
問題は「16進数で表記された文字列をint型に変換せよ」なのでは?

0027デフォルトの名無しさんNGNG
>>26
>>16でURLエンコードに変わったのよ。
0028デフォルトの名無しさんNGNG
>1
単にstrtol()でbaseを16進数に変換すれば
一発じゃない?それとも標準関数を使っちゃいけないの?
0029デフォルトの名無しさんNGNG
>28
それだと演習にならないからNGだと思うよ。
■ このスレッドは過去ログ倉庫に格納されています