Tag: 铸造

C函数将float转换为byte数组

我正在尝试创建一个接受float变量并将其转换为字节数组的函数。 我发现了一段可行的代码,但如果可能的话,我希望在函数中重用它。 我也在使用Arduino环境,但我知道它接受大多数C语言。 目前有效: float_variable = 1.11; byte bytes_array[4]; *((float *)bytes_array) = float_variable; 我可以在这里更改以使此function有效吗? float float_test = 1.11; byte bytes[4]; // Calling the function float2Bytes(&bytes,float_test); // Function void float2Bytes(byte* bytes_temp[4],float float_variable){ *(float*)bytes_temp = float_variable; } 我对指针等不太熟悉,但我读过(浮动 )是使用铸造还是什么? 任何帮助将不胜感激! 干杯 *编辑:已解决 这是我的最终function在Arduino中适用于任何发现此function的人。 在下面的答案中有更有效的解决方案,但我认为这是可以理解的。 function:将输入浮点变量转换为字节数组 void float2Bytes(float val,byte* bytes_array){ // Create union of shared memory space union […]

为什么要输入一个void指针?

作为C的新手,我从void指针中获得的唯一实际用法是用于在给定指针中存储不同数据类型的多function函数。 因此,在进行内存分配时,我没有输入指针。 我见过一些有时使用void指针的代码示例,但是它们是类型转换的。 为什么这有用? 为什么不直接创建所需类型的指针而不是void?

浮点指针被类型化为char指针时会发生什么?

int main() { float f = 12.2; char *p1; p1 = (char *)&f; printf (“%d”, *p1); } 这输出51。

警告:赋值从指针生成整数而不进行强制转换

当我将char *声明为固定字符串并重用指针指向另一个字符串时 /* initial declaration */ char *src = “abcdefghijklmnop”; ….. /* I get the “warning: assignment makes integer from pointer without a cast” */ *src =”anotherstring”; 我试图重铸指针但没有成功。

无效铸造有什么作用?

我正在阅读一些源代码,这就出现了; struct Cookie * Curl_cookie_add(struct SessionHandle *data, /* rest of params were here */) { /* unrelated things were here */ #ifdef CURL_DISABLE_VERBOSE_STRINGS (void)data; #endif /* rest of function goes here */ } 如您所见,void casted指针,甚至不分配给变量。 我想知道这是什么目的。

在内存中执行机器代码

我正在试图弄清楚如何执行存储在内存中的机器代码。 我有以下代码: #include #include int main(int argc, char* argv[]) { FILE* f = fopen(argv[1], “rb”); fseek(f, 0, SEEK_END); unsigned int len = ftell(f); fseek(f, 0, SEEK_SET); char* bin = (char*)malloc(len); fread(bin, 1, len, f); fclose(f); return ((int (*)(int, char *)) bin)(argc-1, argv[1]); } 上面的代码在GCC中编译得很好,但是当我尝试从命令行执行程序时,如下所示: ./my_prog /bin/echo hello 程序段错误。 我已经发现问题出在最后一行,因为评论它会阻止段错误。 我不认为我做得很对,因为我仍然在考虑function指针。 这个问题是错误的演员,还是其他什么?

malloc需要类型转换吗?

malloc中使用类型转换有什么用? 如果我不在malloc中编写类型转换,它会返回什么? (为什么malloc需要进行类型转换?)

pow()转换为整数,意外结果

我在C编程语言中使用整数强制转换为pow()函数时遇到了一些问题。 我正在使用的编译器是Windows平台的Tiny C编译器 (tcc版本0.9.24)。 执行以下代码时,它输出意外结果100, 99 : #include #include int main(void) { printf(“%d, “, (int) pow(10, 2)); printf(“%d”, (int) pow(10, 2)); return 0; } 但是,在此在线编译器中,输出符合预期: 100, 100 。 我不知道是什么导致了这种行为。 有什么想法吗? 我编程错误,编译错误?

C:何时在指针类型之间进行转换而不是未定义的行为?

作为C的新手,我很困惑何时投射指针实际上是可以的。 据我所知,你几乎可以将任何指针类型转换为任何其他类型,编译器将允许你这样做。 例如: int a = 5; int* intPtr = &a; char* charPtr = (char*) intPtr; 但是,通常这会调用未定义的行为(尽管它恰好在许多平台上工作)。 这说,似乎有一些例外: 你可以自由地void* (?) 你可以自由地转换为char* (?) (至少我在代码中看过它…)。 那么指针类型之间的转换在C中是不是未定义的行为? 编辑: 我试着查看C标准(“6.3.2.3指针”一节,见http://c0x.coding-guidelines.com/6.3.2.3.html ),但除了有点void*之外,我并没有真正理解它void* 。 EDIT2: 只是为了澄清:我明确地只询问“正常”指针,即不是关于函数指针。 我意识到,转换函数指针的规则是非常严格的。 事实上,我已经问过:-): 如果我转换函数指针,改变参数的数量会发生什么

在C标准中定义的无符号整数是否为负二次转换的行为?

我有在不同平台上运行的代码,似乎得到不同的结果。 我正在寻找一个正确的解释。 Windows: double dbl = -123.45; int d_cast = (unsigned int)dbl; // d_cast == -123 WinCE(ARM): double dbl = -123.45; int d_cast = (unsigned int)dbl; // d_cast == 0 编辑: 谢谢你指出了正确的方向。 修复变通方法 double dbl = -123.45; int d_cast = (unsigned)(int)dbl; // d_cast == -123 // works on both.