uint8_t a = 0x1234;
会吗,这是因为0x34
是第一个字节。
如果是这样,如何执行检查以确保我分配给a
的值不超过uint8_t
的大小?
jslagle@AR-E642-45QS3R1:~ $ cat test.c
#include <stdio.h>
#include <inttypes.h>
int main (int argc, char **argv) {
uint8_t a = 0x1234;
printf("%d %x\n",a,a);
return 0;
}
jslagle@AR-E642-45QS3R1:~ $ gcc -o test test.c
test.c: In function ‘main’:
test.c:5:3: warning: large integer implicitly truncated to unsigned type [-Woverflow]
jslagle@AR-E642-45QS3R1:~ $ ./test
52 34
确实会出现这种情况。如果您这样做,GCC会给您一个警告。
int
这样的有符号类型是未定义的。 如果您的书陈述无符号溢出是未定义的,则该书是错误的。 - Dietrich Epp
int x = 0x1234; uint8_t = x;
这样的问题?(但是不,34 != 0x34。) - user166390int foo = 0x1234; uint8_t bar = 0; if (foo >= 0 && foo <= 0xFF) bar = foo;
如果我完全误解了您的问题,请见谅 :) - Chris Parton