我对C语言非常陌生,我试图理解这段代码,但是有一些东西我不理解,例如,参数Byte data[],我不知道通过赋予函数(Byte *) &i传递给它的是什么。如果能帮上忙我会很感激的,谢谢。
代码:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
typedef unsigned char Byte;
void showsignal(char str[], Byte data[], int size) {
int i,j;
printf ("%s: ", str);
for (i = size-1; i> size-2; i--) {
for (j = 1; j > 0; j--) {
int bit = (data[i] >> j) & 1;
printf ("%d", bit);
}
}
printf ("n");
}
void showexponent(char str[], Byte data[], int size) {
int i,j;
printf ("%s: ", str);
for (i = size-2; i>size-3; i--) {
for (j = 7; j >= 0; j--) {
int bit = (data[i] >> j) & 1;
printf ("%d", bit);
}
}
printf ("n");
}
void showsignificand(char str[], Byte data[], int size) {
int i,j;
printf ("%s: ", str);
for (i = size-3; i>size-4 ; i--) {
for (j = 23; j > 0; j--) {
int bit = (data[i] >> j) & 1;
printf ("%d", bit);
}
}
printf ("n");
}
int main(int argc, char *argv[]) {
float f;
int i;
f = atof(argv[1]);
i = trunc(f);
if (f-i == 0) {
showsignal("sinal", (Byte *) &i, sizeof(i));
showexponent("expoente", (Byte *) &i, sizeof(i));
showsignificand("mantissa", (Byte *) &i, sizeof(i));
} else {
showsignal("sinal", (Byte *) &f, sizeof(f));
showexponent("expoente", (Byte *) &f, sizeof(f));
showsignificand("mantissa", (Byte *) &f, sizeof(f));
}
return 0;
}发布于 2015-04-08 03:19:07
这条线
showsignal("signal", (Byte *) &i, sizeof(i));意味着我们调用showsignal函数并向其传递3个参数。
第一个参数是字符串"signal",这很简单。
第二个参数有点复杂。&i获取变量i的地址,然后我们将该地址转换为Byte指针。因为函数需要一个指向Byte的指针,所以我们不能只向它发送一个整数的地址。这就是为什么我们要把它转换成一个字节指针。
发布于 2015-04-08 03:29:40
此函数接受您查询的参数Byte data[],它是指向无符号字符数组的指针:
void showsignal(char str[], Byte data[], int size) {int main(int argc, char *argv[]) {
float f;
int i;
f = atof(argv[1]);
i = trunc(f);
if (f-i == 0) {
showsignal("sinal", (Byte *) &i, sizeof(i));然后,它将int转换为无符号字节数组,从而将其传递给函数。然后,该函数以二进制格式打印它。它知道传递给它的数组的长度,因为sizeof(i)是i的字节数。
之所以需要强制转换,是因为编译器不会接受参数unsigned char*的int。因此,程序编写器使用&i获取int的地址,使用(Byte *) &i将其转换为unsigned char*指针,然后函数可以将其视为一个数组,以二进制位的形式打印。
https://stackoverflow.com/questions/29498752
复制相似问题