我是一名学生,目前正在做一项作业,需要在 C 中转换不同的数据类型。我们的代码必须是可移植的,因此 sizeof 的使用很重要。还建议我们进行自己的转换,以便独立于编译器这样做。我的问题是如何针对返回 size_t (无符号整数值)的 sizeof 正确转换多种数据类型?
下面看起来很奇怪,但我只是将字符转换为字节,以防它在不同的体系结构上编译,其中字符可能大于/小于 1 字节。
short amountOfBytes;
char b = 10;
amountOfBytes+=(short)((unsigned int)b*sizeof(char));
我这样做对吗?这是另一个例子:
short a, b = 200;
a = (short)(((unsigned int)b+1) * sizeof(char));
最后一个问题,按 size_t 进行转换是否更好,还是应该坚持使用 unsigned int?
最佳答案
您的代码可以调用有符号类型溢出,这不是已定义的操作。因此代码是错误的。
此外,sizeof(char)
定义为1
。但这并不意味着 8 位。请参阅CHAR_BIT
。
关于在 C 中转换多种不同的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28140822/