Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过;“双”字;当它只接受const void*类型参数时,是否通过write()调用?_C_Linux_Unix_Pointers - Fatal编程技术网

如何通过;“双”字;当它只接受const void*类型参数时,是否通过write()调用?

如何通过;“双”字;当它只接受const void*类型参数时,是否通过write()调用?,c,linux,unix,pointers,C,Linux,Unix,Pointers,给定双温度=6.5如何将其传递到UNIX系统调用: write(fd[1],(WTF?),100) fd[1]是一个文件描述符 100是一个固定的缓冲区大小,用于处理大数值,以防万一 我把它放在中间是什么?我尝试了itoa、temp、temp、char、temp等多种方法,通过谷歌搜索找到了不同的解决方案,但目前为止运气不佳。老实说,我甚至不知道什么类型是const void*。我只知道,如果我直接向第二个参数传递一个字符串,如“Hello World”,它将停止抱怨。如果您不介意将二进制数据写

给定<代码>双温度=6.5如何将其传递到UNIX系统调用:

write(fd[1],(WTF?),100)

  • fd[1]
    是一个文件描述符
  • 100
    是一个固定的缓冲区大小,用于处理大数值,以防万一

  • 我把它放在中间是什么?我尝试了itoa、temp、temp、char、temp等多种方法,通过谷歌搜索找到了不同的解决方案,但目前为止运气不佳。老实说,我甚至不知道什么类型是const void*。我只知道,如果我直接向第二个参数传递一个字符串,如“Hello World”,它将停止抱怨。

    如果您不介意将二进制数据写入文件,请尝试

    write(fd[1],&temp,sizeof(temp))

    如果确实要将值写入文本文件,则需要首先将其转换为字符串。如果是这种情况,您可以尝试以下方法:

    #define BUFF_SIZE 100
    
    double temp = 17.5;
    char* str[BUFF_SIZE];
    
    sprintf(str, "%lf", temp);
    
    write(fd[1], str, strlen(str));
    

    如果您不介意将二进制数据写入文件,请尝试

    write(fd[1],&temp,sizeof(temp))

    如果确实要将值写入文本文件,则需要首先将其转换为字符串。如果是这种情况,您可以尝试以下方法:

    #define BUFF_SIZE 100
    
    double temp = 17.5;
    char* str[BUFF_SIZE];
    
    sprintf(str, "%lf", temp);
    
    write(fd[1], str, strlen(str));
    

    写入
    的第二个参数是指向内存中某个位置的指针,第三个参数是要写入文件的内存中该位置的字节数。所以你的代码应该是:

    double temp = 6.5;
    write(fd[1], &temp, sizeof(temp));
    
    不过,我不确定这是否正是你想要的。为了清楚起见,这将把您的
    double
    的二进制表示形式写入文件。在大多数平台上,这将是以下字节序列(此处以十六进制表示):


    这会将“6.5”写入文件。

    写入
    的第二个参数是指向内存中某个位置的指针,第三个参数是要写入文件的内存中该位置的字节数。所以你的代码应该是:

    double temp = 6.5;
    write(fd[1], &temp, sizeof(temp));
    
    不过,我不确定这是否正是你想要的。为了清楚起见,这将把您的
    double
    的二进制表示形式写入文件。在大多数平台上,这将是以下字节序列(此处以十六进制表示):


    这会将“6.5”写入您的文件。

    是否要
    写入
    双精度
    或其字节的十进制表示形式?在后一种情况下,
    write(fd[1],&temp,sizeof temp)
    ,在前者中,
    sprintf
    将其转换为
    charstr[100]
    写入(fd[1],str,strlen(str))
    @danielfisher我想要一个子进程将temp的值发送给我,这样我就可以在父进程中进行一些计算。我知道如何从char数组转换为double,但不是相反。如果我可以通过write直接发送double,很好,否则char数组也可以工作,因为我可以在主进程中将其转换回十进制
    发送更少字节且不会丢失精度。@Danielfisher谢谢,非常感谢。sprintf方法至少可以工作。现在我将尝试&temp方法。是否要
    写入
    双精度的十进制表示形式或其字节?在后一种情况下,
    write(fd[1],&temp,sizeof temp)
    ,在前者中,
    sprintf
    将其转换为
    charstr[100]
    写入(fd[1],str,strlen(str))
    @danielfisher我想要一个子进程将temp的值发送给我,这样我就可以在父进程中进行一些计算。我知道如何从char数组转换为double,但不是相反。如果我可以通过write直接发送double,很好,否则char数组也可以工作,因为我可以在主进程中将其转换回十进制
    发送更少字节且不会丢失精度。@Danielfisher谢谢,非常感谢。sprintf方法至少可以工作。现在我将尝试使用&temp方法。请注意,如何从read()函数中取消对该方法的引用?我已经创建了一个char buffer[100]数组,我将其传递到read(fd[0],buffer,100)中;读入另一个
    double
    与写入相同:
    double temp;读取(fd[0],&temp,温度大小)
    对于写入二进制双精度的第一个方法,您可以使用:
    read(fd[1],&temp,sizeof(temp))
    对于存储字符串的第二个方法,它将更加复杂,因为我们没有使用预定义的大小<代码>字符*缓冲区[BUFF_SIZE],c;int i=0;do{read(fd[1],&c,sizeof(c));buffer[i]=c;++i;}而(c!='\0')
    在相关注释中,我如何从read()函数中取消引用它?我已经创建了一个char buffer[100]数组,我将其传递到read(fd[0],buffer,100)中;读入另一个
    double
    与写入相同:
    double temp;读取(fd[0],&temp,温度大小)
    对于写入二进制双精度的第一个方法,您可以使用:
    read(fd[1],&temp,sizeof(temp))
    对于存储字符串的第二个方法,它将更加复杂,因为我们没有使用预定义的大小<代码>字符*缓冲区[BUFF_SIZE],c;int i=0;do{read(fd[1],&c,sizeof(c));buffer[i]=c;++i;}而(c!='\0')P爸爸,我正在使用pipe()在父进程和子进程之间进行通信。一旦我通过管道写入&temp,您是说我将收到6.5的二进制表示,对吗(例如,在我的例子中是0xFFFF83)?我怎样才能把它转换回十进制呢?我声明了一个大小为100的缓冲区数组,并使用read()函数接受write()传入的传输。@twillightponyinc。你不需要任何转换,如果你