文字列は"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-_"の64文字です。
最初にスタート文字列と終了文字列を10進数に変換し、ループ中に10進数から64進数に変換しようと考えていますが正しいでしょうか?
一応64⇔10進数変換までは書けてますが、望んでいる結果になりません。
自分が作成した関数ですと例えば「aaa」とすると10進数は当然0になります。
「aaa」で10進数に変換してから64進数に戻したときに「aaa」に戻ってほしいのですが、
この場合どのようにしたらいいのでしょうか?
void Convert_Str_10(char* s, char* e)
{
int i[] = { 0 };
int n = 0;
int m = 0;
int x = 0;
int y = 0;
int z = 0;
char* start = s;
char* end = e;
const char* Characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-_"; // 64 Characters
z = 0;
for (x = 0; x < strlen(start); x++)
{
for (y = 0; y < 64; y++)
{
if (start[x] == Characters[y])
{
i[z] = y;
break;
}
}
z++;
}
m = z;
for (x = 0; x < m; x++)
{
n = 1;
for (y = 0; y < z; y++)
{
n *= 64;
}
z -= 1;
start_num += i[x] * n;
}
z = 0;
for (x = 0; x < strlen(end); x++)
{
for (y = 0; y < 64; y++)
{
if (end[x] == Characters[y])
{
i[z] = y;
break;
}
}
z++;
}
m = z;
for (x = 0; x < m; x++)
{
n = 1;
for (y = 0; y < z; y++)
{
n *= 64;
}
z -= 1;
end_num += i[x] * n;
}
}
void Convert_10_64(int num, char** set64)
{
const char* Characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-_"; // 64 Characters
int x = 0;
int y = 0;
int n = 0;
char str[10] = { 0 };
char set[10] = { 0 };
while (1)
{
x = num / 64;
if (num < 64)
{
y = num;
}
else
{
y = num % 64;
}
set[n] = Characters[y];
num = x;
n++;
if (x == 0) break;
}
set[n] = '\0';
x = 0;
y = 0;
n -= 1;
while (x < n)
{
str[y] = set[n];
y++;
n--;
}
set[0] = '\0';
strcpy_s(set, str);
*set64 = set;
}