在 C 中转换多种不同的数据类型

标签 c casting unsigned-integer size-t

我是一名学生,目前正在做一项作业,需要在 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/

相关文章:

C - 从字符串转换为无符号整数

c - 释放动态结构数组的内存

C 平衡括号检查器

types - 为什么我可以键入别名函数并在不强制转换的情况下使用它们?

c - unsigned int 函数的返回类型

c++ - 当我提供一个只接受无符号整数的有符号整数函数时,有没有办法让 GCC 提醒我?

c - C 中释放简单链表内存的两种方法?

c - 插入排序不起作用

java - ClassCastException Double 到 Float

java - 无法将 Object 或 instanceof 转换为 true 到 IProject || Java Eclipse 插件开发