- プラットフォーム: Linux 3.2.0 x86 (Debian 7.1)
- コンパイラ: GCC 4.7.2 (Debian 4.7.2-5)
引数に整数値 (基数) を受け入れる整数から文字列への変換関数を作成しています。整数引数 (基数) の有効範囲は非常に小さく (2 ~ 36)、char の最大サイズよりも小さいです。したがって、引数をcharとして宣言したいのですが、long long intに上記の引数を掛ける必要があり、それがどのように機能するのか疑問に思っています。計算プロセスに余分なものが追加される場合、引数を char として宣言したくありません。したがって、私の質問は、計算自体に関して long long int を char で乗算するとどうなるかです。また、この関数は、最悪の場合、unsigned char の最大サイズよりも小さい少量のデータを書き込むため、短い int を使用してインデックスを付けたいと考えています。これは、char を使用してポインターを逆参照しようとすると警告が表示されるためです。
int integer_conversion(long long int integer, char *str, short int str_size, char radix)
{
//'i' is the index variable I was talking about.
short int i = 1;
long long int radix_place = 1;
if(str == NULL) return -1;
if(str_size <= 0) return -2;
if(integer < 0)
{
//radix_place(long long int) * radix(char)
for(; integer / radix_place <= -radix; radix_place *= radix, i++);
i++;
if(i > str_size) return -4;
str[i] = '\000';
i--;
if(radix >= 2 && radix <= 10)
{
for(; i >= 1; i--)
{
//integer(long long int) mod radix(char)
str[i] = -(integer % radix) + '0';
//integer(long long int) / radix(char)
integer /= radix;
}
}
else if(radix >= 11 && radix <= 36)
{
for(; i >= 1; i--)
{
//integer(long long int) mod radix(char)
str[i] = -(integer % radix);
//Is any type of conversion or promotion preformed here?
if(str[i] <= 9) str[i] += '0';
else str[i] += '7';
//integer(long long int) / radix(char)
integer /= radix;
}
}
else return 2354;
str[0] = '-';
}
else
{
//radix_place(long long int) * radix(char)
for(; integer / radix_place >= radix; radix_place *= radix, i++);
if(i > str_size) return -4;
str[i] = '\000';
i--;
if(radix >= 2 && radix <= 10)
{
for(; i >= 0; i--)
{
//integer(long long int) mod radix(char)
str[i] = integer % radix + '0';
//integer(long long int) / radix(char)
integer /= radix;
}
}
else if(radix >= 11 && radix <= 36)
{
for(; i >= 0; i--)
{
//integer(long long int) mod radix(char)
str[i] = integer % radix;
//Is any type of conversion or promotion preformed here?
if(str[i] <= 9) str[i] += '0';
else str[i] += '7';
//integer(long long int) / radix(char)
integer /= radix;
}
}
else return 2354;
}
return 0;
}