将16进制数据写入结构体时,遇到double型出错

我定义了一个结构体
struct RAW
{
int size;
double time;
int size2;
char name;
}PingHeader;
想用结构体对齐,直接读取到PingHeader中。
infile.read((char*)&PingHeader,sizeof(PingHeader));
但是转换成double是就会出错,当把double注释掉是就可以按照类型大小一一次赋值了。是在搞不懂了,希望大哥指点指点

2个回答

结构体有有字节对齐,因此,sizeof(PingHeader)=24,大于结构体各成员宽度之和(17),字节是不对应的。int size 从第一个字节开始到第四个字节,第五个字节到第八个字节是空的,double time事实上是从第9个字节开始的,而不是从第5个字节开始。结构体的字节对齐,默认是以最大的成员字节数为基准,比如,你这里的字节对齐就是8字节。当然,你可以自己设定结构体字节对齐值,如果设置字节对齐为1字节的话,sizeof(PingHeader)就等于17了。修改方法是:在程序开头加上预处理命令#pragma pack(1)。想了解更多结构占用空间大小,可以参考http://blog.csdn.net/qq_28249373/article/details/76784475

qq_33460068
qq_33460068 对了,谢谢您,你帮了我大忙,
大约 2 年之前 回复

name确定是1个字节?还有就是写入的确定正确?好像你是从文件里读取的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
将double型转换成16进制
QT中double大小为8字节,我要将其转换成4字节的16进制数,请问该怎么转呢?百度没找到方法
delphi 16进制表示的double型如何转换成double型??
double型数据 3 的16进制表示为:00 00 00 00 00 00 08 40rnrnrn如何将这个16进制转换成3啊。。,,。?
编辑框中数据写入结构体出错
rn有一个ComboBox和几个edit 选择ComboBox中一个选项(每添加一个选项都将内容写入结构体的name里面),rnrn然后我在几个edit中输入内容 点击“保存”按钮将内容写入对应的结构体中的变量,rnrn编译能通过,可为什么一点“保存”就出错呢?rnrn跪求解释!rnrnrn代码如下:rnrn结构体:rntypedef structrnrn CString name; // 姓名rnrn CString tel; // 联系电话rnrn CString subject; // 专业rnrn CString jobwhere; //工作地址rnrn CString jobfor; //工作岗位rnrn rn NAMECODE;rnrnNAMECODE m_ncode[100];rnrnrnm_cbshow.GetLBText(m_cbshow.GetCurSel(),temp); //获取当前选中名片rnm_ncode.name[0] = temp;rnrnrnTCHAR ch[4];rnGetDlgItemText(IDC_EDITX2,&ch[0],sizeof(ch[0]));rnGetDlgItemText(IDC_EDITX3,&ch[1],sizeof(ch[1]));rnGetDlgItemText(IDC_EDITX4,&ch[2],sizeof(ch[2]));rnGetDlgItemText(IDC_EDITX5,&ch[3],sizeof(ch[3]));rnrnm_ncode[i].tel = ch[0]; //联系电话rnm_ncode[i].subject = ch[1]; //专业rnm_ncode[i].jobfor = ch[2]; //工作岗位rnm_ncode[i].jobwhere = ch[3]; //工作地址
AppendChunk操作double型指针时出错
............rnrgsabound[0].lLbound = 0;rnrgsabound[0].cElements = nSize;rnpsa = SafeArrayCreate(VT_R8, 1, rgsabound);rnfor (long i = 0; i < (long)nSize; i++)rnSafeArrayPutElement (psa, &i, pBuf++);//pBuf是double型指针rnvarBLOB.vt = VT_ARRAY | VT_R8;rnvarBLOB.parray = psa;rnm_pRecordset->GetFields()->GetItem("double")->AppendChunk(varBLOB);rn//如果将上面的VT_R8替换成VT_UI1就不会出错,但是用GetChunk读取时就是乱码了rn.............rnrn高手们:rn 如何操作double数据的Appendchunk()和Getchunk()?rn 多谢!
日期型数据写入数据库出错
代码如下:rnindate=Trim(Request.form("indate1"))rnif not isdate(indate) thenrnindate=CDate(indate)rnend ifrnsql="insert into buy(selldate) values("#"&indate&"#")rnconn.execute(sql)rnrnrn错误类型:rnMicrosoft VBScript 运行时错误 (0x800A000D)rn类型不匹配: 'CDate'rn/produit/produit_add.asp, 第 39 行rn
Double 型比较会出错?
double型一般是不能直接比较的。double1==double2rn谁能给一个直接比较会出错的例子。
如何把double型转为16进制的字符串?
double d = 3971102464.32186;rn可以省略小数点,转为 "ECB23700"rnrn
如何将double 型转化成16进制, 谢谢
double a=123.557 rn 如何将整数部分123转化为16进制rn 如何将小数部分转化为16进制?
将字符串转为double型的?
用的是哪个函数?
怎么将String型转换成double型
在计算中要输入小数,用Integer.parseInt(yishiji)不能解决问题,他只能换成int型,该如何换????
数据写入时遇到奇怪的错误?
运行时提示rnKey column information insufficient or incorrent.Too many rows were affect by updatern不知道什么原因?rn紧!!!rnrnrnTADOQuery* Query=new TADOQuery(this);rn Query->Connection = Conn;rn tryrn Query->SQL->Text="select price from machine";rn Query->Open();rn while (!Query->Eof)rn Query->Edit();rn Query->FieldByName("price")->Value=chkPrice(Query->FieldByName("Price")->Value);rn Query->Post();rn Query->Next();rn rn rn __finallyrn delete Query;rn
int型和double型?
double dValue = 20;rnprintf( "%d", dValue );rnrn为什么上面的结果是0,而不是20呢(用%f或%e输出结果就不用说了,我是指的是这个结果的本质)?rnrn谢谢!
double与8位16进制互转
double与8位16进制互转,输入double转为8位16进制;输入8位16进制转化为double
double转换16进制 c#
eg:rn想实现的结果: 1000000 => 00 0F 42 40; -1000000 => FF F0 BD C0rn 现在采用double转换byte数组的方式,rn但是实现不了想转换的结果( 1000000 => 00 0F 42 40; -1000000 => FF F0 BD C0);
16进制字符串 转换成double
输入: unsigned char input[] = 'A','5';rn输出: double result = 0xA5rnstl 或者 boost有现成的api作这样的转换工作吗?
怎么将double型转换成float
刚开始学习JAVA 作了一道数据类型转换的题目rn1个float类型的数和1个double类型的数求和,结果以float类型返回rn我是这样写的rnclass FdPlusrnrn private float a;rn private double b;rn rn public FdPlus(float x,double y)rn rn a=x;rn b=y;rn rn rn public void plus()rn rn System.out.println("a="+a+",b="+b);rn System.out.println("两个数的和是:"+Float.parseFloat(a+b));rn rnrnrneclipse提示:类型 Float 中的方法 parseFloat(String)对于参数(double)不适用rnrn请指点一下怎么才能转成功
请问怎么将double型写入文件?
将double x=2.578以二进制写入文件是这样吗rnrnofstream outf("1.txt",ios::binary);rnoutf.write((char*)&x,8);rnrn我得不到期望的结果
求助 将标准输入读入的数据写入另一个文件时出错
APUE 第二版 习题3.6rnrnresult:rnwo de mengrnwrite error!rn何解?rnrn[code=C/C++]rn/*********************************************************************rnAPUE 第二版 习题3.6rn rn 如果使用添加标志打开一个文件以便读写,能否仍能用lseek在任一位置开始读?rn 能否用lseek更新文件中任一部分的数据?rn *********************************************************************/rn#include rn#include rn#include rn#include rnrn#define BUFFSIZE 4096rnrnint main(int argc, char* argv[])rnrn if (argc != 2)rn rn printf("Please enter the file name!\n");rn exit(1);rn rnrn int fd;rnrn if ((fd = open(argv[1],O_APPEND))== -1)rn rn printf("open error!\n");rn exit(2);rn rnrn off_t offset = 10;rn /* rn if (lseek(fd,offset,SEEK_CUR) == -1)rn rn printf("cannot seek.\n");rn rn elsern rn printf("seek OK!");rn rn*/rn int n;rn char buf[BUFFSIZE];rnrn while ((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0)rn rn if (write(fd, buf, n) != n)rn rn printf("write error!\n");rn exit(3);rn rnrn rnrn if (n < 0)rn rn printf("read error!\n");rn exit(4);rn rnrn exit(0);rn[/code]
16进制&HFFFF赋值给Long型,出错?!
如下理想结果x的值应该为 65535,但实际运行的结果为 -1. 编译器的bug??rnrnPrivate Sub Command1_Click()rn Dim x As Longrn x = &HFFFF '&HFFFF = 65535rnEnd Sub
将一个double型数值保留两位小数
    在处理数值运算的时候,有时候会遇到保留几位小数的需求,下面是一个保留两位小数的简单方法。   /** * 将数据保留两位小数 */ privatedoublegetTwoDecimal(doublenum) { DecimalFormatdFormat = newDecimalFormat(&quot;#.00&quot;); Stringyea...
将double型复制到字符串中
我有一个变量 double nValue。现要将nValue复制到一个字符串char m_sendmsg[1024]中。要求是nValue在m_sendmsg中所占的大小就是一个sizeof(double)的大小。rnrn这个其实就是一个对一个结构体进行赋值,只不过是把结构体看成一个字符串而已。rnrn应该如何实现?
求助:将char[]转化为double型
小弟最近遇到了一点小问题,来请大家帮助,rn我现在有一个字符串 char str[5] = "2.132"rn我现在想把它转化化double型,请大家帮助我是一下,rn事先说明一个我用的str是char[]型的,不是char*,rn若是char*可以有解法strtod(str,str),就可以做到了rn有知道了,请大家帮个忙
将double型小数四舍五入,保留两位小数
System.out.printf(“%.2f”, average);//.2f表示保留两位小数,average是double型变量
将16进制字符串转为UINT型
几乎0基础菜鸟求救。。现需给CAN网络的帧ID赋值,其定义为一个UINT型。rn比如,我现在想将0C0203A7。这几个值赋给他,但是目前我这几个值是CString型,请问要怎么赋值?rn
VC将数据写入EXCEL出错,帮忙看看
在BOOL CVCExcelApp::InitInstance()之中,int nResponse = dlg.DoModal()语句之后加入如下代码: rnif(!AfxOleInit())///初始化COM库rn rn AfxMessageBox("初始化COM失败");rn return FALSE;rn rn 为了能调用Excel的接口我们打开MFC ClassWizard->Automation->Add Class->From a type library,选择[Excel的安装路径]\EXCEL.exe,然后把所有的类都添加进去,头文件为excel.h,源文件为excel.cpp。当然,你也可以只把一些比较常用的类如_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range加进去,因为网上流传的绝大部分教程都只添加这几个类,这完全根据你个人的需要。但在本例中我们至少还要用到Interior类(设置底色),Font类(设置字体),而且这样做又简单又方便扩展功能,不管三七二十一全部弄进去吧!但这样做会有一个问题,有可能产生类的名字冲突,例如本来你自己写了一个类叫Font,当你全部添加时又再次加入了Font类,这样就重复定义了,不过可以通过名字空间来解决这个问题。再在VCExcelDlg.cpp文件的头部添加(如果系统已经自动添加就不要重复添加了): rn#include "VCExcel.h" rn#include "comdef.h" rn这样一来我们的程序就可以自由调用EXCEL了,一切准备就绪。 rnrn我按了上面步骤进行添加excel类了,但是为什么会运行错误呢?我是在现有的工程添加类的,错误为:rnCompiling...rnexcel.cpprnc:\documents and settings\chenbikui\桌面\testmenu\excel.h(7879) : warning C4099: 'Parameter' : type name first seen using 'struct' now seen using 'class'rn d:\work\汽车仪表检测\soft\testmenu\debug\msado15.tlh(97) : see declaration of 'Parameter'rnc:\documents and settings\chenbikui\桌面\testmenu\excel.h(7909) : error C2011: 'Parameters' : 'struct' type redefinitionrnc:\documents and settings\chenbikui\桌面\testmenu\excel.h(10594) : error C2011: 'Errors' : 'struct' type redefinitionrnc:\documents and settings\chenbikui\桌面\testmenu\excel.h(10615) : error C2011: 'Error' : 'struct' type redefinitionrnC:\Documents and Settings\chenbikui\桌面\testmenu\excel.cpp(43000) : error C2039: 'GetApplication' : is not a member of 'Parameters'rn d:\work\汽车仪表检测\soft\testmenu\debug\msado15.tlh(2035) : see declaration of 'Parameters'rnC:\Documents and Settings\chenbikui\桌面\testmenu\excel.cpp(43003) : error C2065: 'InvokeHelper' : undeclared identifierrnC:\Documents and Settings\chenbikui\桌面\testmenu\excel.cpp(43007) : error C2039: 'GetCreator' : is not a member of 'Parameters'rn d:\work\汽车仪表检测\soft\testmenu\debug\msado15.tlh(2035) : see declaration of 'Parameters'rnC:\Documents and Settings\chenbikui\桌面\testmenu\excel.cpp(43014) : error C2039: 'GetParent' : is not a member of 'Parameters'rn d:\work\汽车仪表检测\soft\testmenu\debug\msado15.tlh(2035) : see declaration of 'Parameters'rnC:\Documents and Settings\chenbikui\桌面\testmenu\excel.cpp(43021) : error C2039: 'Add' : is not a member of 'Parameters'rn d:\work\汽车仪表检测\soft\testmenu\debug\msado15.tlh(2035) : see declaration of 'Parameters'rnC:\Documents and Settings\chenbikui\桌面\testmenu\excel.cpp(43032) : error C2509: 'GetCount' : member function not declared in 'Parameters'rn d:\work\汽车仪表检测\soft\testmenu\debug\msado15.tlh(2035) : see declaration of 'Parameters'rnC:\Documents and Settings\chenbikui\桌面\testmenu\excel.cpp(43039) : error C2063: 'Item' : not a functionrnC:\Documents and Settings\chenbikui\桌面\testmenu\excel.cpp(43039) : error C2040: 'Item' : 'struct IDispatch *(const struct tagVARIANT &)' differs in levels of indirection from 'class _com_ptr_t >'rnC:\Documents and Settings\chenbikui\桌面\testmenu\excel.cpp(43039) : fatal error C1903: unable to recover from previous error(s); stopping compilationrnError executing cl.exe.rnCreating browse info file...rnBSCMAKE: error BK1506 : cannot open file '.\Debug\excel.sbr': No such file or directoryrnError executing bscmake.exe.rnrnrnrn假如我新建一个工程,按如上方法添加excel类的时候没有报错,不知道上面的错误是什么回事,请大牛们帮忙,多谢!!!
填充结构体时遇到的问题
我从串口接收到数据。往一个数据结构中填充。我用类型强制转换,将结构体类型指针转换为无符号字符型指针。然后将接收到的数据按顺序往结构体里面填充。但是我的结构体还是空的。是不是在指针传递的时候出现了问题?代码:rnuint8_t receive_gprs_frame(SendFrame buff)rnrn static uint8_t status = 0;rn uint8_t *pt = &buff;rn uint16_t check;rn uint16_t res = 0;rn uint8_t data,ret,length = 0;rn rn dorn rn res = uart0_getc();rn *(pt++)= res;rn while (!res);rnrn这样是不是buff里面就会有数值了?如果传递进来的是指针,是不是要使用指向指针的指针?rnuint8_t receive_gprs_frame(SendFrame buff)rnrn ......rn uint8_t ** pt=(uint8_t*)buff;rn .....rnrnrn **pt = res;rnrn这样处理对不对?
float型和double型的问题
有段程序是这样的:rnstruct sturnrnint num;rnchar *name;rnchar sex;rnfloat score;rn boy1=102,"Zhang ping",'M',78.5,*pstu;rnmain()rnrnpstu=&boy1;rnprintf("Number=%d\nName=%s\n",boy1.num,boy1.name);rnprintf("Sex=%c\nScore=%f\n\n",boy1.sex,boy1.score);rnprintf("Number=%d\nName=%s\n",(*pstu).num,(*pstu).name);rnprintf("Sex=%c\nScore=%f\n\n",(*pstu).sex,(*pstu).score);rnprintf("Number=%d\nName=%s\n",pstu->num,pstu->name);rnprintf("Sex=%c\nScore=%f\n\n",pstu->sex,pstu->score);rn,运行正常,但是在我用double型替换float型后,如下,score项只显示0,这是为什么呢?rnstruct sturnrn int num;rn char *name;rn char sex;rn double score;rn boy1 = 102, "Zhang ping", 'M', 78.5 , *pstu;rnvoid main()rnrn pstu = &boy1;rn printf("Number=%d\nName=%s\n", boy1.num, boy1.name);rn printf("Sex=%c\nScore=%d\n\n", boy1.sex, boy1.score);rn printf("Number=%d\nName=%s\n", (*pstu).num, (*pstu).name);rn printf("Sex=%c\nScore=%d\n\n", (*pstu).sex, (*pstu).score);rn printf("Number=%d\nName=%s\n", pstu->num, pstu->name);rn printf("Sex=%c\nScore=%d\n\n", pstu->sex, pstu->score);rn
将日期型的字符串转换为DOUBLE型的函数是什么?
-
sql中怎么将double型 的转换为字符串型
sql中怎么将double型 的转换为字符串型 ,急,在线等
结构体重复赋值时出错
[code=c]while (!rs->_EOF)rn //2rn AfxMessageBox("111");rn m_ebomdataset.m_ID=atoi((TCHAR *)(_bstr_t)rs->GetFields()->GetItem((long)0)->Value);rn m_ebomdataset.m_name=(TCHAR *)(_bstr_t)rs->GetFields()->GetItem((long)1)->Value;rn m_ebomdataset.m_parentid=atoi((TCHAR *)(_bstr_t)rs->GetFields()->GetItem((long)5)->Value);rn rs->MoveNext();rn[/code] rn出错rnF5提示:MbomManageSystem.exe 中的 0x0096b3af 处有未经处理的异常: 0xC0000005: 读取位置 0x00000001 时发生访问冲突
求助,关于将double型变量转换成BYTE型的问题
在V C 中运行如下代码:rndouble f1;rnBYTE ch[255];rnfor(int i=0;i<256;i++)rnrn f1=(i+0.5F)/256;//归一化rn f1=pow(f1,2.22);//求指数函数rn ch[i]=(BYTE) (f1*256-0.5F);//反归一化rnrnrnrn运行后ch[i]中数据为0;rn调试时系统提示ch[]是错误的指针,ch[i]中的值是无法计算的表达式rn请问什么原因?rn该怎样改?rn谢谢各位!!!!!
怎么样将一个CURRENCY型的数据转换成DOUBLE型?
-
怎么将String型转化为Double型?
比如rnDim str1 as stringrndim i as doublernstr1="12.23"rnrn怎么得到i=12.23 ??
怎样将文本型数据转化成double型数据
怎样将文本型数据转化成double型数据
double型做除法时的注意事项
对于int i=3; double t=i/2; t得到的结果是1.0 而double t=i/2.0; t得到的结果是1.5 所以double型做除法时,一定要注意除数或者被除数一定要至少有一个为double型!!!...
关于8位16进制数如何转double型浮点数?
[quote]rnSelect Case MSComm1.CommEventrn Case comEvReceivern rn rev_len = MSComm1.InBufferCountrn intReceiveByteCounter = intReceiveByteCounter + MSComm1.InBufferCountrn rn rn rn indata = MSComm1.Inputrn rn rn rn rn For i = 0 To rev_len - 1 Step 1rn Text7.Text = Text7.Text + Chr(indata(i))rn Sensor_Rev_Data(intReceiverPointer + i) = indata(i)rn Next irn rn Text7.Text = Text7.Text + Chr(10) + Chr(13)rn intReceiverPointer = intReceiverPointer + rev_lenrn rn rn rn If intReceiverPointer > 24 Then '如果已遇到结束符E(End),则开始处理数据rn intReceiveByteCounter = 0 '将记数器清零rn intReceiverPointer = 0rn rn If Sensor_Rev_Data(0) = &H1 Thenrn rn Form3.Text1.Text = "01"rn rn [size=18px] [color=#FF6600] CopyMemory DBX, Sensor_Rev_Data(3), 8rn rn Form3.Text4.Text = DBX[/color][/size]rn[/quote]
在编写将结构体写入文件时遇到的问题,请高手指点
我写了一段程序,测试些结构体到文件的操作,用的语言是c++,运行环境是ubuntu 7.04 ,g++4.1.2, 代码如下:rnrn#include rn#include rn#include rnusing namespace std;rnrnint main()rnrn struct LongTimern rn unsigned long long a;rn time_t timer;rn ;rn LongTime longtime;rn longtime.a = 4;rn time(&longtime.timer);rn cout<<"size of unsigned long long: "<(buf2);rn buf2 += sizeof(unsigned long long);rn longtime2.timer = *reinterpret_cast(buf2);rn buf2 += sizeof(time_t);rn cout<<"a2: "<
怎样在DOUBLE型转换到INT型时做到四舍五入?
在计算机机里的DOUBLE型数据是一个近似的值,当我把它强制转换成整型时程截取了它的整数部分,结果造成我算出的数有的比实际数小一,有的正好,请问如何在转换时四舍五入,谢谢!
插入数据时,int型和double型的显示问题
请问各位高手,数据库访问组件开发(MFC),窗口上方是控件,下面是数据表格,插入数据时,int型和double型不能及时正确显示,是怎么回事?rn 具体问题如下,第一行的值下面本来应该是1,结果显示为“r”,第二行的值下面本来应该是0.001,结果什么也不显示。rnrn原单位 目标单位 值rn kg kg rrn g kgrnrn但是查询一下的话就都能正确显示了。rnrn原单位 目标单位 值rn kg kg 1rn g kg 0.001
sprintf将ascll转换为16进制出错?
在做udp服务器端,接收到的为ascll码,所以想用sprintf转16进制。rnrnrn```rnfor(i=0;i
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件