Tag: 铸造

我如何在C中将类型的变量更改为另一个?

我要做: int main () { bla bla bla void *onetype; switch (USER_INPUT_TYPE) { CASE CONVERT_TO_CHAR: convert onetype VOID TO CHAR >>> HOW??? CASE CONVERT_TO_INT: convert onetype VOID TO INT >>> HOW??? LOT OF CASES… } } 是的,我知道类型转换,但类型转换是一种“临时”改变。 那么,有没有办法在C中完成它? 编辑: 停止停止! 请看,你在做什么是类型转换,我知道,你正在创建另一个所需类型的变量,如int i =(int)onetype,我不想要这个,我想要其他像onetype =(int )ontyype,无需重新创建它们,无需分配另一个变量。 非常感谢!

在同一条线上投两次

我在项目中看到了这段代码。 b的类型是void* : void *b = …; int a = (int) (unsigned long) b; 这条线是没有意义的吗? 我的意思是,它在所有情况下都与a = (int) b相同吗?

将void指针强制转换为struct

我开始对C感到舒服,然后遇到了铸造。 如果我在* .h文件中定义了以下内容 struct data { int value; char *label; }; 这是另一个* .h文件 # define TYPE void* 如何将void指针强制转换为struct,以便我可以使用传递给函数的变量“TYPE val”? 例如,如果我想利用TYPE val指向的值,我该如何转换它以便我可以将该值传递给另一个函数?

将性能从size_t转换为double

TL; DR :为什么size_t乘法/转换数据会变慢,为什么每个平台会有所不同? 我遇到了一些我不太了解的性能问题。 上下文是相机帧抓取器,其中以几个100Hz的速率读取和后处理128×128 uint16_t图像。 在后处理中,我生成直方图thismaxval frame->histo thismaxval ,其为uint32_t并且具有thismaxval = 2 ^ 16个元素,基本上我统计了所有强度值。 使用这个直方图,我计算总和和平方和: double sum=0, sumsquared=0; size_t thismaxval = 1 << 16; for(size_t i = 0; i histo[i]; sumsquared += (double)(i * i) * frame->histo[i]; } 使用配置文件分析代码我得到以下(样本,百分比,代码): 58228 32.1263 : sum += (double)i * frame->histo[i]; 116760 64.4204 : sumsquared += (double)(i * i) […]

识别隐式强制转换和显式强制转换

如果有人能回答我的问题,我将不胜感激。 识别隐式演员和显式演员? int a = 2, b = 3; float f = 2.5; double d = -1.2; int int_result; float real_result;

错误:赋值在C Prog中从Integer发出没有强制转换的指针

每当我运行程序“Assignment在没有强制转换的情况下从Integer发出指针”时,我都会收到此错误。 我的代码写在下面….请帮助…谢谢 struct student { char studentID[6]; char name[31]; char course [6]; }; struct student *array[MAX]; struct student dummy; int recordCtr=0; int read(){ FILE *stream = NULL; int ctr; char linebuffer[45]; char delims[]=”, “; char *number[3]; char *token = NULL; stream = fopen(“student.txt”, “rt”); if (stream == NULL) stream = fopen(“student.txt”, “wt”); else { printf(“\nReading […]

short / char上的’〜’运算符隐式转换为int(C / gcc)

使用gcc的-Wconversion警告,看起来chars和short被隐式转换为int。 #include #pragma GCC diagnostic warn “-Wconversion” void main(void) { short i = 1; short j = 1; short k = j & ~i; printf(“value %d\n”, j); } 给出以下警告, test.c: In function ‘main’: test.c:9:15: warning: conversion to ‘short int’ from ‘int’ may alter its value [-Wconversion] short k = j & ~i; ^ 回到短暂的静止警告short k […]

如何打印像nm这样的ELF文件的符号名称?

我知道符号的名称在shstrtab中。 但我不明白如何捕捉它们。 我应该将我的shstrab转换为Elf64_Sym,以便我可以使用st_name吗? Elf64_Shdr *shdr = (Elf64_Shdr *) (data + elf->e_shoff); Elf64_Shdr *symtab; Elf64_Shdr *shstrtab; Elf64_Shdr *strtab; char *str = (char *) (data + shdr[elf->e_shstrndx].sh_offset); for (int i = 0; i e_shnum; i++) { if (shdr[i].sh_size) { printf(“%s\n”, &str[shdr[i].sh_name]); if (strcmp(&str[shdr[i].sh_name], “.symtab”) == 0) symtab = (Elf64_Shdr *) &shdr[i]; if (strcmp(&str[shdr[i].sh_name], “.shstrtab”) == 0) shstrtab […]

C当值溢出时,将浮点类型转换为无符号整数类型时会发生什么

我想知道在C中从浮点类型转换为无符号整数类型时会发生什么,当值无法用相关的整数类型准确表示时。 举个例子 func (void) { float a = 1E10; unsigned b = a; } b我在我的系统上的值(在我的系统上unsigned能够表示从0到2 ^ 32-1的值)是1410065408 。 这对我来说似乎是明智的,因为它只是演员阵容结果的最低位。 我相信这些操作的行为在标准中是不确定的。 我错了吗? 如果我做这样的事情,我在实践中可以期待什么? 此外,签名类型会发生什么? 如果b是int类型,我得到-2147483648 ,这对我来说没有意义。

如何删除警告“从’int’转换为’char’可能会改变其值”

我虽然如果我cast出这样的数字(unsigned char)32它就足以修复编译器警告,但它不像我计划的那样。 这里我有以下部分实际解释问题的程序: #include #include #include int main(void){ char *ptr = malloc(6); const char *name = “MICHI”; unsigned int i = 0; if(ptr){ strcpy(ptr, name); ptr[strlen(ptr)] = ‘\0’; }else{ return 1; } while(ptr[i] != ‘\0’){ if((ptr[i] >= ‘A’) && (ptr[i] <= 'Z')){ ptr[i] += (unsigned char)32; } i++; } printf("Name = %s\n",ptr); if(ptr){ free(ptr); ptr […]