我知道0xff根据变量类型可以有不同的表示形式。就像-1代表有符号(chars / ints(?))和255代表无符号chars。
但是,我使用的是uint8_t的与实现无关的类型,并且我确保要遍历的结构内部确实存在0xff。这是代码:
struct pkt {
uint8_t msg[8];
};
void main(int argc, char **argv) {
...
struct pkt packet;
memset(&packet, 0, sizeof packet);
strcpy(packet.msg, "hello");
packet.msg[strlen("hello")] = '\xff';
crypt(&packet, argv[1]);
...
}
void crypt(struct pkt *packet, unsigned char *key) {
int size = msglen(packet->msg);
...
}
int msglen(uint8_t *msg) {
int i = 0;
while(*(msg++) != '\xff') {
i++;
}
return i;
}
我已经研究了该结构,并且packet.msg [5]确实设置为0xff。但是while循环进入了无限循环,就像从未发现0xff一样。
诸如0x7f的值有效。我没有尝试过0x80,但我怀疑如果0xff不起作用,它可能将无法工作。这可能与签名的性质有关,但我只是看不出问题的根源。
谢谢。
编辑:对我来说,无论我使用0x7f或0xff。但是我只想知道是什么阻止了我检测0xff。
如果您没有签名,则不能使用字符文字。
'\ xff'为-1,而不是255,因为字符文字已签名。
while条件始终为真。如果未签名,则应仅使用数字:0到255,或将已知的字符转换为<128到未签名。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句