C 如何将数组字符放入等式中?

C 如何将数组字符放入等式中?,c,arrays,C,Arrays,我试着把8字节的字符放进等式中,导致了很多错误,我要做的是确保等式可以接受静态值,并产生8字节的输出 #include <math.h> #include <hidef.h> /* for EnableInterrupts macro */ #include "derivative.h" /* include peripheral declarations */ void voltage_measure(void); void main(void) { vol

我试着把8字节的字符放进等式中,导致了很多错误,我要做的是确保等式可以接受静态值,并产生8字节的输出

#include <math.h>
#include <hidef.h> /* for EnableInterrupts macro */

#include "derivative.h" /* include peripheral declarations */

void voltage_measure(void);

void main(void) {

  voltage_measure();

}

void voltage_measure(void) {
   char Van1[8],VA;
   char Vbn[8],VB;
   char Vcn[8],VC;
   char AC[4],ac;
   char BC[4],bc;
   char AB[4],ab;    
   double Vab1,Vab2,Vbc1,Vbc2,Vac1,Vac2;
   double Vab[8],Vbc[8],Vac[8];

   Van1[0]=0xF0;   
   Van1[1]=0x00;
   Van1[2]=0x00;                                  
   Van1[3]=0x00;

   VA=0x000000F0;

   Vbn[0]=0x78;
   Vbn[1]=0x00;
   Vbn[2]=0x00;
   Vbn[3]=0x00;

   VB=0x78;

   Vcn[0]=0x3C;
   Vcn[1]=0x00;
   Vcn[2]=0x00;
   Vcn[3]=0x00;

   VC=0x3C;

   AB[0]=0xB4;
   AB[1]=0x00;

   ab=0xB4;

   AC[0]=0x2D;
   AC[1]=0x00;

   ac=0x2D;

   BC[0]=0x5A;
   BC[1]=0x00;

   bc=0x5A;
   Vab1=(VB*sin(ab))*(VB*sin(ab))  ;
   Vab2=(VA+(VB*cos(ab)))*(VA+(VB*cos(ab)));
   Vab[4]=sqrt(Vab1+Vab2);

   Vbc1=(VC*sin(bc))*(VC*sin(bc));
   Vbc2=(VB+(VC*cos(bc)))*(VB+(VC*cos(bc))) ;
   Vbc[4]=sqrt(Vbc1+Vbc2);

   Vac1=(VC*sin(ac))*(VC*sin(ac));
   Vac2=(VA+(VC*cos(ac)))*(VA+(VC*cos(ac)));
   Vac[4]=sqrt(Vac1+Vac2);
}
#包括
#包含/*用于启用中断宏*/
#包括“导数.h”/*包括外围声明*/
无效电压测量(无效);
真空总管(真空){
电压测量();
}
无效电压测量(无效){
char-Van1[8],VA;
char-Vbn[8],VB;
char-Vcn[8],VC;
char-AC[4],AC;
char BC[4],BC;
char-AB[4],AB;
双Vab1、Vab2、Vbc1、Vbc2、Vac1、Vac2;
双Vab[8],Vbc[8],Vac[8];
Van1[0]=0xF0;
Van1[1]=0x00;
Van1[2]=0x00;
Van1[3]=0x00;
VA=0x000000F0;
Vbn[0]=0x78;
Vbn[1]=0x00;
Vbn[2]=0x00;
Vbn[3]=0x00;
VB=0x78;
Vcn[0]=0x3C;
Vcn[1]=0x00;
Vcn[2]=0x00;
Vcn[3]=0x00;
VC=0x3C;
AB[0]=0xB4;
AB[1]=0x00;
ab=0xB4;
AC[0]=0x2D;
AC[1]=0x00;
ac=0x2D;
BC[0]=0x5A;
BC[1]=0x00;
bc=0x5A;
Vab1=(VB*sin(ab))*(VB*sin(ab));
Vab2=(VA+(VB*cos(ab))*(VA+(VB*cos(ab));
Vab[4]=sqrt(Vab1+Vab2);
Vbc1=(VC*sin(bc))*(VC*sin(bc));
Vbc2=(VB+(VC*cos(bc))*(VB+(VC*cos(bc)));
Vbc[4]=sqrt(Vbc1+Vbc2);
Vac1=(VC*sin(ac))*(VC*sin(ac));
Vac2=(VA+(VC*cos(ac))*(VA+(VC*cos(ac));
Vac[4]=sqrt(Vac1+Vac2);
}

这是我迄今为止所理解的

  • 您希望使用具有多个参数的双精度运算
    • 您希望将参数存储在
      char
      变量中(可能是为了节省空间?)
    • 我不知道你为什么要写
      VA=0x000000F0char
      (1字节)变量时,为code>
    • 您引用的
      静态值
      可能是常量
      VA
    • 让所有这些都以
      double
      的精度在算术中工作可能会很有用
    • 当您使用
      sin
      sqrt
      这类函数时,它们将以
      double
      的方式工作
    • 您没有此处列出的
      main
      函数
    • 它将出现在您的实际文件中(编译此代码的文件)
    • 因此,我还假设您包括
      math.h
      之类的内容
      以及compile命令上的数学库
    • 也就是说,您确实可以在没有错误的情况下编译二进制文件
  • 也许你可以再详细说明一下你面临的问题


  • 从评论1更新。
    当你说“字符带8字节数组”时,你是想用8字节数组创建一个双字节数组吗

    • 根据评论2更新。 如果您的答案在
      double
      中,您可以在
      double
      变量中捕获它。
      double
      已经是8字节(在大多数平台上)。
      是否有特殊原因将其放入
      char
      数组或字节数组

    • 从评论3更新。
      链接错误意味着您包含了用于链接的数学库。
      标题仅给出了用于编译的函数原型。
      使用
      gcc
      ,它将是命令行上的
      -lm

    • 根据评论4进行更新。
      要将
      double
      转换为整数值,请检查此页面,


  • 问题是您的计算机上的纯
    char
    是有符号的,所以像0xF0这样的数字被视为-16而不是+240?你知道在某些机器上会发生这种情况吗?

    关于你在评论中提到的链接错误:包括math.h是不够的,你必须告诉链接器也添加库。尝试在命令行中添加“-lm”。

    您可能希望对问题进行一点扩展…-1在提供更多信息之前,
    main()
    不应返回
    void
    。它应该返回
    int
    。任何让您的
    main()
    返回
    void
    的编译器都是错误的。@克里斯:可能是错误的,但在嵌入式软件中并不少见。有些编译器甚至不要求有主函数!实际上,在这个编程中,我尝试用8字节数组创建字符,而值Va只是数组的组合,那么我该怎么做才能将字符值放入方程中。从计算结果来看,答案必须是双精度的。所以我需要用8字符数组创建双精度的。这可能吗?@kiki:double Va=Van[0]+(Van[1]*pow(2,8))+(Van[2]*pow(2,16))+(Van[3]*pow(2,24));我也不知道特殊原因是什么..我只是被要求这么做。我在尝试编译时遇到了链接错误..它说“sin”没有定义,但我已经包含了math.hdo你知道如何为UINT8变量赋值吗?