Tag: 类型转换

转换为int时浮点数为何在C下面舍入?

在一次采访中,有人问我对以下代码有何看法: #include int main() { float f = 10.7; int a; a = f; printf (“%d\n”, a); } 我回答了: 当您将float更改为没有float转换的int ,编译器将发出警告。 由于您没有使用强制转换,因此int将具有垃圾值。 然后,他们允许我在在线编译器上运行程序。 我不堪重负。 我的假设都是错误的。 编译器没有发出任何警告,并且int的值为10.即使我改变了, float值为10.9或10.3,答案也是一样的。 即使投了一个cast并没有改变结果。 有人能告诉我为什么会发生这种情况,结果会在什么情况下有所不同。 注意:在编译时,面试官告诉我不添加gcc标志。 编辑:现在我已经明白,浮动不会四舍五入,答案将是10.但有人可以解释我为什么这样设计? 转换为int时为什么浮动,在下面四舍五入? 有具体原因吗?

在C中运行时获取变量的类型

我可以在C中获取程序变量’在运行时在特定内存段中存在的类型。 C无法识别错误: int k=5; float s= 3.4; k=s; printf(“%d”, k); 我试图在运行时更改变量的类型。

为什么我通过乘以两个短整数得到一个负数?

我有一个作业,我有以下代码摘录: /*OOOOOHHHHH I’ve just noticed instead of an int here should be an *short int* I will just left it as it is because too many users saw it already.*/ int y=511, z=512; y=y*z; printf(“Output: %d\n”, y); 这给了我Output: -512 。 在我的任务中,我应该解释原因。 所以我很确定这是因为隐式转换(纠正我,如果我错了:))从将int值赋给short int发生。 但我的导师说,事情刚刚发生,我想是“三轮”。 我找不到任何关于它的事情,我正在看这个video ,那个人解释(25:00)几乎和我告诉我的导师一样。 编辑: 这是我的完整代码: #include int main() { short int y=511, […]

如何在C,500到0x0500中将十进制文字转换为hex

我有以下内容:int num = 500; char text [8]; 如何使文本最终成为hex0x500或1280? 编辑:我看到它很简单,使其成为文本,就像在一些答案中。 但是我需要将这个文本解释为C语言的hex。所以实际上它应该是一个无符号的hexint。

将整数列表解释为Python中的float

我试图将C代码段转换为python。 所述function的目的是从PLC获取4位,8位读数,并将它们解码为单个浮点数。 float conv_float_s7_pc(char * plc_real) { char tmp[4]; tmp[0] = * (plc_real + 3); tmp[1] = * (plc_real + 2); tmp[2] = * (plc_real + 1); tmp[3] = * (plc_real + 0); return (* (float *) tmp) ; } 是否有一些可以干净地执行此function的Python魔法? 虽然我试图转换上面的函数,但更普遍的问题是,你将如何在python中执行这样的内存“重新解释”? 编辑 这让我得到了我需要的东西: import struct def conv_to_float(plc): temp = struct.pack(“BBBB”, plc[0], plc[1], plc[2], plc[3]) […]

将unsigned char数组的内容分成两半

我想知道是否有人可以帮助我我只学习c,我试图将unsigned char数组的内容分成两半,结果可以存储在两个unsigned int中, 例如,我在下面有一些代码将hex值添加到BYTE数组中,那么如何将val []的内容分成两个但保持相同的顺序 #include typedef unsigned char BYTE; int main() { // Sample purposes putting hex into val[8] int i,j; long long hex=0x78661EB54FE76763; BYTE val[8]; for(j=0,i=7; i>=0; i–,j++){ val[j]= (hex>>(i*8))&0xff; } // How to split the contents of val[8] which now holds the hex return 0; } 我试图将hex值拆分为78661EB5,4FE76763并将每个值存储在unsigned int中,该值存储在我的示例中的val [8]中

将int(32位)转换为char(8位)

我有这些定义: int data = uartBaseAddress[UART_DATA_REGISTER / 4]; // data coming from UART RX port char message[20]; // array of 20 chars 现在当我尝试这样做时: message[0] = (char) data; printf(“%x”, message[0]); 它打印(例如): “ffffff9c” 。 当然我只想要最后8位(“9c”),我不明白如何正确地进行从int到char的转换。 编辑:我的意思是:我必须像这样填充数组: data = 0xFFFFFF9c; message[0] = data & 0xFF; — it has to contain only 9c data = 0xFFFFFFde; message[1] = data & […]

Typecasting指向浮点指针的指针

我正在尝试做以下事情 int a[8]={1,2,3,4,5,6,7,8}; printf(“%f\n”, *(float *)a); printf(“%f\n”, *((float *)a+1)); printf(“%f\n”, *((float *)a+2)); printf(“%f\n”, *((float *)a+3)); printf(“%f\n”, *((float *)a+4)); printf(“%f\n”, *((float *)a+5)); printf(“%f\n”, *((float *)a+6)); printf(“%f\n”, *((float *)a+7)); 我明白了 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 我试图以这种方式打印元素的原因是因为,我想将指向数组的int指针强制转换为浮点指针并将其作为另一个函数的参数传递给float * 。 看来这不行。 有人可以解释为什么这不起作用? int *ptr; function((float *)ptr); 如果我这样做,该函数不会读取指针正确指向的值..只返回0.0000 。

C中的十进制到二进制

我正在创建一个添加和减去2个数字的程序。 然后我必须将这个答案输出到不同的基础。 我的答案是十进制格式,类型为long double,例如: long double answer; answer = numberOne + numberTwo; 我想将这个答案转换成二进制。 现在我在我的程序中使用的代码执行此操作,但使用char指针: char * decimalBinary (char * decimalNumber) { bool zeroFront = true; int i; int z; int j = 0; int n = atoi(decimalNumber); char * binaryNum = malloc(32+1); binaryNum[32] = ‘\0’; int current_index=1; int end_index = strlen(decimalNumber)-1; //Error check for valid […]

循环并将数据分配给结构成员的宏错误地将结构成员识别为指针

我的问题是atoi正在将字符串的hex内存地址转换为十进制,而不是字符串中包含的内容。 它是在宏中执行此操作。 当宏定义使它成为int时,为什么将struct-> member解释为指针? 下面的伪代码: if (struct.member == int)? struct.member = atoi(data) : struct.member = data; 该程序的这一部分的目的是从包含有关结构属性的信息的.csv文件中检索数据。 我可以接受一个“id”并将每个单元格字符串存储到一个字符串数组(csvRowSplit)中。 但是,我想将数组的内容传输到包含不同数据类型的结构(我想用来检索玩家保存的属性,攻击方法,商店物品等的方法)。 硬编码很容易: opponent->att = atoi(csvSplitRow[0]); opponent->= atoi(csvSplitRow[1]); opponent->hitpoints = atoi(csvSplitRow[2]); opponent->description = csvSplitRow[3]); 然而,这种结构成分更多,并且不是非常灵活或可重复。 我已经定义了一个宏来循环遍历结构的元素,并将csvSplitRow []与变量配对,如果需要转换为atoi。 #define X_FIELDS \ X(char*, description, “%s”) \ X(int, xpreward, “%d”) \ X(int, att, “%d”) \ /* … */ X(int, crit, “%d”) […]