【发布时间】:2019-07-03 16:58:47
【问题描述】:
我目前正在解决一个问题,我必须将一个 void 指针转换为一个有符号字符,短、长、长。 (这些看起来很简单,我可以创建一个 tmp,然后投射 void。)
让我困惑的是: 将 void 指针转换为: 有符号十进制、无符号八进制、无符号十进制、无符号十六进制、%f 转换 其中,“double arg 被四舍五入并覆盖为十进制。
对于大多数这些转换,我只会使用带有正确基数的 atoi 吗?
我将使用可变参数,并且会知道实际的值是什么,但我的计划是将所有内容类型转换为 void 指针,然后根据格式对其进行转换。转换是我不清楚的。为清楚起见:我将 va_arg 转换为 void 指针,并将其存储在结构中。然后根据格式,我将每个 void 指针转换为正确的数据类型。我只是想弄清楚如何对上面列出的数据类型进行每次转换
感谢您的任何帮助。
void ft_conversion_length_di(t_main *node)
{
if (node->length == 'H')
node->arg = (signed char)node->arg;
if (node->length == 'h')
node->arg = (short)node->arg;
if (node->length == 'l')
node->arg = (long)node->arg;
if (node->length == 'E')
node->arg = (long long)node->arg;
}
【问题讨论】:
-
void pointer into a signed char.... - 你的意思是 pointer 指向这些?还是实际的数字类型?你的问题是混合主题。给我们一个示例代码并提出一个具体问题。
-
请举例说明您正在尝试做的事情。
-
“将 void 指针转换为:有符号十进制、无符号八进制、无符号十进制、无符号十六进制……”是什么意思?这些不是 C 类型。
-
描述是不够的,因为这些可能是 vauge。尝试解决问题的示例代码以及输入和预期输出将使我们更好地了解您到底想要做什么。
-
只有当且仅当该值实际上是您证明的值时,您才能进行类型转换。如果你有
void*,但它实际上是内存中的double,那么将其类型转换为int将导致严重失败,二进制表示是不同的。atoi仅用于转换 ASCII 表示。如果您不知道您的void*指向什么,请弄清楚。
标签: c casting type-conversion