%02x 陷阱
2020-06-12 本文已影响0人
超级无敌帅气小飞侠
下面如果用 0x7f 则不会有6个 f 前缀,用 0x8f 则有这个问题。
事实上 0x8f 最高位是1,所以 int8_t 类型会将它当成负数,%x会将其补为 int,高位补1,就看到一串 f;而在 uint8_t 或 long 的世界里是正数。
NSLog(@"%02x", 0x8f); // output: 8f
NSLog(@"%02x", (char)0x8f); // output: ffffff8f
NSLog(@"%02x", (int8_t)0x8f); // output: ffffff8f
NSLog(@"%02x", (uint8_t)0x8f); // output: 8f
NSLog(@"%02llx", (long long)0x8f); // output: 8f
%02x 不代表只输出两位,而是至少输出两位。