我正在寻找一个实际示例,我必须使用uint32_t
而不是unsigned int
来表示桌面应用程序。你能否提供C++
代码和:
uint32_t
一起使用,并且(最有可能)与unsigned int
失败; 我的主要目标是尽可能轻松地重现它。
答案 0 :(得分:5)
想象一下,您编写了一个可移植程序(即它可以在各种不同类型的计算机上编译和运行),并且您的程序需要能够保存和加载数据文件。
为简单起见,我们会说程序的数据文件只需要包含一个整数。因此,当用户单击“保存”时,程序fwrite()将unsigned-int放入文件中。由于您在64位模式下运行在现代Intel机器上,因此生成的文件长度为8个字节(因为该平台上的sizeof(unsigned int)== 8)。
现在您将数据文件通过电子邮件发送给您的朋友,供他使用。你的朋友加载到文件中,但他在旧的Pentium Pro机器上编译并运行你的程序。当他运行你的程序时,它尝试按照预期读取单个int,但是在Pentium Pro上,sizeof(unsigned int)== 4,所以程序只读取4个字节而不是全部8个。现在他的程序是显示不正确的数据,因为它只读取文件的一半。这不好。
另一方面,如果您在保存/加载代码中指定了写入/读取uint32_t而不是unsigned int,则可以放心,无论采用何种体系结构,文件总是长度为4个字节。程序编译为。因此,通过使用uint32_t而不是unsigned int,您可以更轻松地编写和读取数据文件。
(请注意,在现实生活中你还想使用htonl()和ntohl(),这样你的数据文件对于Big Endian和Little Endian机器都是一样的,但这是一个单独的问题)
答案 1 :(得分:4)
unsigned int
可能不是32位,它取决于程序运行的计算机体系结构。
uint32_t
在库中定义,typedef
为32位整数。
这种做法更多的是便携性。即使目标平台没有定义uint32_t
,您也可以轻松typedef
到32位整数类型。