[ create a new paste ] login | about

Link: http://codepad.org/NrlIZHVT    [ raw code | fork ]

C, pasted on May 31:
#include <stdio.h>

#define  IN_NUTRAL   0
#define  IN_0        1
#define  IN_X        2
#define  IN_NUMBER   3
#define  IN_X_ERROR  (unsigned long)-1
#define  IN_N_ERROR  (unsigned long)-2

void  HexTo12(char *num)
{
	unsigned long  i = 0, j = IN_NUTRAL;
	printf("%s: ", num);
	if(!*num)
	{
		puts("エラー: 文字列が空です。");
		return;
	}
	while(*num)
	{
		switch(*num)
		{
			case '0':
				i = i * 16;
				if(j == IN_NUTRAL)
					j = IN_0;
				break;
			case '1': j = IN_NUMBER; i = i * 16 + 1; break;
			case '2': j = IN_NUMBER; i = i * 16 + 2; break;
			case '3': j = IN_NUMBER; i = i * 16 + 3; break;
			case '4': j = IN_NUMBER; i = i * 16 + 4; break;
			case '5': j = IN_NUMBER; i = i * 16 + 5; break;
			case '6': j = IN_NUMBER; i = i * 16 + 6; break;
			case '7': j = IN_NUMBER; i = i * 16 + 7; break;
			case '8': j = IN_NUMBER; i = i * 16 + 8; break;
			case '9': j = IN_NUMBER; i = i * 16 + 9; break;
			case 'A': case 'a': j = IN_NUMBER; i = i * 16 + 10; break;
			case 'B': case 'b': j = IN_NUMBER; i = i * 16 + 11; break;
			case 'C': case 'c': j = IN_NUMBER; i = i * 16 + 12; break;
			case 'D': case 'd': j = IN_NUMBER; i = i * 16 + 13; break;
			case 'E': case 'e': j = IN_NUMBER; i = i * 16 + 14; break;
			case 'F': case 'f': j = IN_NUMBER; i = i * 16 + 15; break;
			case 'X': case 'x':
				if(j != IN_0)
				{
					puts("エラー: xの位置が不正です。");
					return;
				}
				j = IN_X;
				break;
			default:
				puts("エラー: 16進数表記になっていません。");
				return;
		}
		++num;
	}
	if(i < 0 || i > 1000000)
	{
		puts("エラー: 0以上100万以下の整数ではありません。");
		return;
	}
	j += (i / (1 * 12 * 12 * 12 * 12 * 12)) % 12 << 20; 
	j += (i / (1 * 12 * 12 * 12 * 12)) % 12 << 16; 
	j += (i / (1 * 12 * 12 * 12)) % 12 << 12; 
	j += (i / (1 * 12 * 12)) %12 << 8; 
	j += (i / (1 * 12)) % 12 << 4; 
	j += (i / (1)) % 12; 
	printf("%lX\n", j);
}

int main(int argc, char *argv[])
{
	int  i;
	if(argc < 2)
	{
		puts("エラー: 引数が指定されていません。");
		return -1;
	}
	for(i = 1; i < argc; ++i)
	{
		printf("%d: ", i);
		HexTo12(argv[i]);
	}
	getchar();
	return 0;
}


Create a new paste based on this one


Comments: