C 如何将数组字符放入等式中?
我试着把8字节的字符放进等式中,导致了很多错误,我要做的是确保等式可以接受静态值,并产生8字节的输出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
#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=0x000000F0当其为
(1字节)变量时,为code>char
- 您引用的
可能是常量静态值
等VA
- 让所有这些都以
的精度在算术中工作可能会很有用double
- 当您使用
和sin
这类函数时,它们将以sqrt
的方式工作double
- 您没有此处列出的
函数李>main
- 它将出现在您的实际文件中(编译此代码的文件)
- 因此,我还假设您包括
之类的内容math.h
以及compile命令上的数学库 - 也就是说,您确实可以在没有错误的情况下编译二进制文件
当你说“字符带8字节数组”时,你是想用8字节数组创建一个双字节数组吗
- 根据评论2更新。
如果您的答案在
中,您可以在double
变量中捕获它。double
已经是8字节(在大多数平台上)。double
是否有特殊原因将其放入
数组或字节数组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变量赋值吗?