字符与整数运算
Character vs Integer Arithmetic
这与另一个问题有关,但我相信我已经解决了那个问题,现在遇到了这个问题。看来我可以在 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;
}
问题是这样的
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';
这与另一个问题有关,但我相信我已经解决了那个问题,现在遇到了这个问题。看来我可以在 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;
}
问题是这样的
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';