我正在使用一种方法来制作十六进制解码器,该方法接受2个字符的数组,将其更改为整数,然后打印出ASCII字符。我正在执行的循环由于某些原因而无法正常工作,但是如果我添加一些打印语句以查看循环时的值,那么该循环就可以正常工作,我也不知道为什么。我盯着它看了一个小时。这是代码。
void decipher(char charArray[])
{
int baseValue = 0; // represents the empty set of bits 00000000
for (int i = 0; i < 2; i++)
{
int nibbleForMoving = 0; // represnts the empty set of bits 0000
if (charArray[i] >= '0' && charArray[i] <= '9')
{
nibbleForMoving = charArray[i] - '0';
}
if (charArray[i] >= 'a' && charArray[i] <= 'f')
{
nibbleForMoving = charArray[i] - 'a'+10; // sets nubble to the decimal valu
}
baseValue = (baseValue << 4) | nibbleForMoving;
}
printf("%c", baseValue);
}
这不起作用,将不打印任何内容。我也相信我的程序总体上挂在这里的某个地方,但是我不能说。如果我将其修改为这样
void decipher(char charArray[])
{
int baseValue = 0; // represents the empty set of bits 00000000
for (int i = 0; i < 2; i++)
{
int nibbleForMoving = 0; // represnts the empty set of bits 0000
if (charArray[i] >= '0' && charArray[i] <= '9')
{
nibbleForMoving = charArray[i] - '0';
}
if (charArray[i] >= 'a' && charArray[i] <= 'f')
{
nibbleForMoving = charArray[i] - 'a'+10; // sets nubble to the decimal valu
}
baseValue = (baseValue << 4) | nibbleForMoving;
printf("%d, %d", baseValue, nibbleforMoving)"
}
printf("%c", baseValue);
}
将会打印额外的打印语句,它将退出循环并正确打印字符而没有问题。有什么想法吗?
不可复制,以下是我的代码,用于测试您的原始功能,并且正常退出。
#include<stdio.h>
void decipher(char charArray[])
{
int baseValue = 0; // represents the empty set of bits 00000000
for (int i = 0; i < 2; i++)
{
int nibbleForMoving = 0; // represnts the empty set of bits 0000
if (charArray[i] >= '0' && charArray[i] <= '9')
{
nibbleForMoving = charArray[i] - '0';
}
if (charArray[i] >= 'a' && charArray[i] <= 'f')
{
nibbleForMoving = charArray[i] - 'a'+10; // sets nubble to the decimal valu
}
baseValue = (baseValue << 4) | nibbleForMoving;
}
printf("%c", baseValue);
}
int main()
{
char arr[] = {'a','b','c'};
decipher(arr);
return 0;
}