这与另一个问题有关,但我相信我已经找到了问题并且现在遇到了这个问题。似乎我可以在uint8_t
上正确地进行算术运算,但不能在unsigned char
上进行算术运算。我不确定为什么会这样,因为unsigned char
应该等同于uint8_t
对我的理解。
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
/*
gcc -o ./rsacalc ./rsacalc.c
./rsacalc 1 2 3
should produce 00:00 but usually seems to produce 03:00
*/
int main(int argc, char **argv)
{
unsigned char sg, sk, sm;
uint8_t ng, nk, nm;
if ( argc != 4 ) return 0;
sg = argv[1][0];
sk = argv[2][0];
sm = argv[3][0];
ng = atoi(argv[1]);
nk = atoi(argv[2]);
nm = atoi(argv[3]);
printf("%.2X:%.2X\n",
((sg ^ sk) % sm),
((ng ^ nk) % nm)
);
return 0;
}
答案 0 :(得分:3)
问题是这个
sg = argv[1][0];
sk = argv[2][0];
sm = argv[3][0];
在这里,您要分配'1'
(49),'2'
(50)和'3'
(51)的ASCII codes。请注意'1' != 1
。你正在做算术
不同的价值观,当然结果会有所不同。它无关
与类型。
正确的版本应为
sg = argv[1][0] - '0';
sk = argv[2][0] - '0';
sm = argv[3][0] - '0';