私のプログラムに何が間違っているかの手がかりはありません。この「実験」をプロジェクトに追加する前に、少なくともコンソールアプリケーションでこれを使用できるかどうかテストしたところ、わかりましたが、私は失敗しました。数値ベース間の変換が間違っています
数値ベース(これまではB16またはB2のみを小数点以下)に変換するライブラリを作成しました。モジュラスとディビジョンをどのように管理するのかをよく理解できなかったので、大きな回避策でしたが、一見問題なく機能しました。
私はそれに0xFFを与え、それを0xFF0として扱いました。結果は4,080でした。私は0x16を与え、0x160のように扱いました。結果は352です。何が起こっているのは明らかですが、なぜそれがわからないのですか。少なくとも、これまでのところ、問題はB16にしかありませんでしたが、B2は私にいくつかの奇妙なエラーも与えました。
int bin_to_int(char char_digit){
char_digit = toupper(char_digit);
if (char_digit == '0') {return 0;}
else if (char_digit == '1') {return 1;}
else {return 2;}
}
int hex_to_int(char char_digit){
char_digit = toupper(char_digit);
if (char_digit == '0') {return 0;}
else if (char_digit == '1') {return 1;}
else if (char_digit == '2') {return 2;}
else if (char_digit == '3') {return 3;}
else if (char_digit == '4') {return 4;}
else if (char_digit == '5') {return 5;}
else if (char_digit == '6') {return 6;}
else if (char_digit == '7') {return 7;}
else if (char_digit == '8') {return 8;}
else if (char_digit == '9') {return 9;}
else if (char_digit == 'A') {return 10;}
else if (char_digit == 'B') {return 11;}
else if (char_digit == 'C') {return 12;}
else if (char_digit == 'D') {return 13;}
else if (char_digit == 'E') {return 14;}
else if (char_digit == 'F') {return 15;}
else {return 16;}
}
void conv_todec(int mode_base){
if (mode_base == 16){std::cout << "\nHex to Dec function";}
if (mode_base == 2){std::cout << "\nBin to Dec function";}
if (mode_base == 16){std::cout << "\nEnter a hex number: ";}
if (mode_base == 2){std::cout << "\nEnter a bin number: ";}
std::string numb;
std::cin >> numb;
int str_leg = numb.length();
int total = 0;
for(int i(0);i<str_leg;i++){
if (mode_base == 16){
if (hex_to_int(numb[i]) == 16){func_erro();return;}}
if (mode_base == 2){
if (bin_to_int(numb[i]) == 2){func_erro();return;}}
}
int digits[str_leg] = {};
int j = str_leg;
for(int i(0);i<str_leg;i++){
if (mode_base == 16) {digits[i] = hex_to_int(numb.at(i));}
if (mode_base == 2) {digits[i] = bin_to_int(numb.at(i));}
if (mode_base == 16) {total += (digits[i] * power(mode_base,j--));}
//Somehow the number never had the first digit claiming it as
//either even or odd, so I tried pre-decrementing 'j' and it
//worked for some reason I don't know either.
if (mode_base == 2) {total += (digits[i] * power(mode_base,--j));}}
std::cout << "The result is: " << total << std::endl;
}
'hex_to_int'関数が不必要に長く、非効率的です –