c - 为什么我的函数自己设法将二进制转换为十进制,但在另一个函数中调用时却没有?
问题描述
我正在编写一个调用函数 applyS() 的程序,该函数调用函数 binaryToDecimal(),它将填充 1 和 0 的 char[] 转换为整数。binaryToDecimal() 在我自己测试时有效。它在 applyS() 中获得的 char[] 正确填充了它应该具有的 1 和 0。尽管如此,binaryToDecimal() 只输出 0。仅在第一次转换中它输出 2,这仍然是不正确的。
binaryToDecimal() 看起来像这样:
void binaryToDecimal(char binary[], int *decimal, int binLength)
{
*decimal = 0;
for (int i = 0; i < binLength; i++)
{
int currentPos = binLength - i - 1;
if (binary[currentPos] == 0 || binary[currentPos] == 1)
{
*decimal += binary[currentPos]*pow(2,i);
}
else
{
printf("Illegal input. Can't convert to decimal.");
}
}
}
applyS() 看起来像这样:
void applyS(char sTable[][16], char inputBlock[], char outputBlock[])
{
char splitBefore[8][6];
char splitAfter[8][4];
splitForS(inputBlock, splitBefore);
for (int i = 0; i < 8; i++)
{
int rowArray[2];
int row;
int columnArray[4];
int column;
int newBlockDecimal;
rowArray[0] = splitBefore[i][0];
rowArray[1] = splitBefore[i][5];
columnArray[0] = splitBefore[i][1];
columnArray[1] = splitBefore[i][2];
columnArray[2] = splitBefore[i][3];
columnArray[3] = splitBefore[i][4];
for (int j = 0; j < 2; j++)
{
printf("%d", rowArray[j]);
}
printf(" ");
for (int j = 0; j < 4; j++)
{
printf("%d", columnArray[j]);
}
binaryToDecimal(rowArray, &row, 2);
printf("\t%d ", row);
binaryToDecimal(columnArray, &column, 4);
printf("%d ", column);
printf("\n");
/*newBlockDecimal = sTable[row][column];
decimalToBinary(newBlockDecimal, splitAfter[i], 4);*/
}
joinAfterS(splitAfter, outputBlock);
}
解决方案
感谢您的帮助,我发现了错误。在 applyS() rowArray[] 和 charArray[] 是整数数组,它们应该是字符数组。
推荐阅读
- android - SharedPreferences 包含方法总是返回 true
- java - java web应用程序的哈希+盐
- android - 我正在尝试显示由我创建的通知,而不是 firebase。它适用于旧手机,而不是奥利奥
- google-classroom - 向教室 FAB 添加一个按钮
- python - python - FAB 自定义插件创建和安装
- android - 当从后台堆栈中弹出片段时,片段中的 getParentFragment() 返回 null
- c# - AjaxPost / WebMethod 中的问题。
- html - 如何在 django 中从另一个模型中获取图像
- android - Android OpenGL 渲染器/CypherOS 8.1 索尼 Z2
- c++ - 标准::分配器
: 是否允许在 C++ 中构建未分配的内存?