首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IEEE 754十进制到二进制转换器的C编程

IEEE 754十进制到二进制转换器的C编程
EN

Stack Overflow用户
提问于 2015-04-08 02:36:16
回答 2查看 501关注 0票数 0

我对C语言非常陌生,我试图理解这段代码,但是有一些东西我不理解,例如,参数Byte data[],我不知道通过赋予函数(Byte *) &i传递给它的是什么。如果能帮上忙我会很感激的,谢谢。

代码:

代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

发布于 2015-04-08 03:19:07

这条线

代码语言:javascript
复制
showsignal("signal", (Byte *) &i, sizeof(i));

意味着我们调用showsignal函数并向其传递3个参数。

第一个参数是字符串"signal",这很简单。

第二个参数有点复杂。&i获取变量i的地址,然后我们将该地址转换为Byte指针。因为函数需要一个指向Byte的指针,所以我们不能只向它发送一个整数的地址。这就是为什么我们要把它转换成一个字节指针。

票数 0
EN

Stack Overflow用户

发布于 2015-04-08 03:29:40

此函数接受您查询的参数Byte data[],它是指向无符号字符数组的指针:

代码语言:javascript
复制
void showsignal(char str[], Byte data[], int size) {

代码语言:javascript
复制
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*指针,然后函数可以将其视为一个数组,以二进制位的形式打印。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29498752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档