文字列から整数に変換するプログラムについて
Posted: 2014年3月03日(月) 22:59
はじめまして、C言語の勉強をしています。
例えば”136854329876000”のように文字列(文字数は特に制限なし,unsigned char,NULL終端)として与えられたを数字を
整数に変換していき、unsigned long の最大値:4294967295の何倍か?、また余りがいくらか?を計算したいと考えています。
unsigned long times; /*unsigned longの最大値の何倍か*/
unsigned long remain; /*余り*/
例①:文字列”65536”の場合
times = 0;
remain = 65536
例②:文字列”6442450946”の場合
times = 1;
remain = 2147483651
のような感じで算出したいのですが、どのように計算すれば良いのかがわからず困っています。
ご教授いただけないでしょうか?
1の位から順に数値に変換していって....と考えたのですが
オーバーフローしてしまう場合にどのように処理を続ければ良いものかと悩んでおります…
void testcode(unsigned char *ptr)
{
unsigned long tmp=0, number=0;
unsigned long total;
unsigned long i;
unsigned long count=0;
unsigned str_len;
unsigned char *ptr2;
str_len = strlen((char*)ptr);
ptr2 = ptr+(str_len -1); /*1の位のポインタに移動*/
for(tmp = 0; ('0' <= *ptr2) && (*ptr2 <= '9') ; ptr2--)
{ /*1の位から順に数値に変換していく*/
number = (*ptr2-'0');
for(i=0; i<count; i++)
{
number *= 10;
}
tmp += number;
if(seisuu <= tmp)
{
seisuu += number;
count++;
if(count==str_len){
break;
}
} else {
/*overflow*/
:
:
}
}
:
:
}
説明が分かり憎いようでしたら申し訳ありませんが、
どうぞ宜しくお願い致します。
例えば”136854329876000”のように文字列(文字数は特に制限なし,unsigned char,NULL終端)として与えられたを数字を
整数に変換していき、unsigned long の最大値:4294967295の何倍か?、また余りがいくらか?を計算したいと考えています。
unsigned long times; /*unsigned longの最大値の何倍か*/
unsigned long remain; /*余り*/
例①:文字列”65536”の場合
times = 0;
remain = 65536
例②:文字列”6442450946”の場合
times = 1;
remain = 2147483651
のような感じで算出したいのですが、どのように計算すれば良いのかがわからず困っています。
ご教授いただけないでしょうか?
1の位から順に数値に変換していって....と考えたのですが
オーバーフローしてしまう場合にどのように処理を続ければ良いものかと悩んでおります…
void testcode(unsigned char *ptr)
{
unsigned long tmp=0, number=0;
unsigned long total;
unsigned long i;
unsigned long count=0;
unsigned str_len;
unsigned char *ptr2;
str_len = strlen((char*)ptr);
ptr2 = ptr+(str_len -1); /*1の位のポインタに移動*/
for(tmp = 0; ('0' <= *ptr2) && (*ptr2 <= '9') ; ptr2--)
{ /*1の位から順に数値に変換していく*/
number = (*ptr2-'0');
for(i=0; i<count; i++)
{
number *= 10;
}
tmp += number;
if(seisuu <= tmp)
{
seisuu += number;
count++;
if(count==str_len){
break;
}
} else {
/*overflow*/
:
:
}
}
:
:
}
説明が分かり憎いようでしたら申し訳ありませんが、
どうぞ宜しくお願い致します。