gpt4 book ai didi

c - 在 C 中查看和使用 void 指针中的各个字节

转载 作者:行者123 更新时间:2023-11-30 14:54:59 25 4
gpt4 key购买 nike

我正在尝试制作一个计算器,它采用一个名为 yourVal 的空指针,查看第一个字节并确定它是“*”还是“/”。根据符号,我将字节 3+4、5+6 和 7+8 相乘。假设我有*1234567。我乘以 23 * 45 * 67。通过除法,我将字节 5(45) 除以字节 3(23)。我是 C 语言指针的新手,我真的不知道如何为 void 指针设置一个值。当我在 main 中执行以下操作时

void *yourVal;
*yourVal = "*1234567";
printf("%s\n", yourVal);

我无法取消引用 void 指针。但我尝试使用 char 指针,并且遇到同样的问题。这是我的计算器功能的代码。根据我是否使用 printf,我会得到不同的结果。

int calculator(void *yourVal){
char *byteOne;
short int *byteThree, *byteFive, *byteSeven;
int value;

byteOne = (char *)yourVal;
byteThree = (short int *)yourVal+2;
byteFive = (short int *)yourVal+4;
byteSeven= (short int *)yourVal+6;

if(*byteOne == '*') {
value = *byteThree * *byteFive * *byteSeven;
printf("You multiplied\n");
}
else if(*byteOne == '/') {
if (*byteThree == 0) {
value = 0xBAD;
printf("Your input is invalid\n");
}
else {
value = *byteFive / *byteThree;
printf("You divided\n");
}
}
else {
value = 0xBAD;
printf("Your input is invalid\n");
}
}

除法根本不起作用,乘法只能得到一位数字。任何提示将不胜感激。我查看了各种来源,但没有看到如何有效地使用空指针。另外,我不能使用除 printf 之外的任何库函数,而且这是一项学校作业,所以尽量不要剧透太多或者为我做。我们得到了一个提示,即将 yourVal 转换为一个结构。但我对此迷失了。谢谢

最佳答案

byteOne = (char *)payload;
byteThree = (short int *)yourVal+2;
byteFive = (short int *)yourVal+4;
byteSeven= (short int *)yourVal+6;

这并不像你想象的那样。如果您想读取这些位置的数字,您需要执行类似的操作。

char* Value = yourValue;
unsigned byteOne, byteThree, byteFive, byteSeven;
byteOne = Value[0] - '0';
byteThree = Value[2] - '0';
byteFive = Value[4] - '0';
byteSeven = Value[6] - '0';

我在这里所做的是读取该位置的字节并减去 ASCII '0' 的值来获取该字符的数值。但同样,这仅适用于单个角色。

如果您需要读取更多字符,则必须使用 sscanfatoi 等库函数。

关于c - 在 C 中查看和使用 void 指针中的各个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46357981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com