3 回答
TA贡献1816条经验 获得超6个赞
可能错在了计算机存储机制上,
在32位系统的计算机中,每次变量的存储都是按以4的倍数位置开始的地址来存储的,
也就是说你新建一个变量,不管它是什么类型的,他都是从4的倍数位开始的。
虽然你这么存储是确实把内部东西都存储进去了,但是根据计算机的编码显示原因,
你直接看编译后产生的那些东西就是乱码的,或者不符合你要求的。
你可以对照原始存储进去的二进制码与原来的对比,应该是相同的。
而且int x=10; 这里的int应该是4个字节,WriteData(&x,2);应该是WriteData(&x,4);
TA贡献1864条经验 获得超6个赞
你是如何看到数据没有被追加到m_pData里的?
按你第二种意思的话, int型数据要转为string型写入才能有10abcd这种效果:
void WriteInt(int i)
{
char tmp[20] = {0};
sprintf(tmp, "%d", i);
WriteData(tmp,strlen(tmp));//如果你是按字符串看m_pData的,这里就不是strlen(tmp)+1,否则要+1
}
WriteString也取决于你是按字符串方式看的还是按内存长度直接单个字符打出来的。相应应该没有“+1”和有“+1”
TA贡献1859条经验 获得超6个赞
void WriteData(void *data,int len)
{
char * newPos=m_pData+m_iWriteOffset;
memcpy(newPos,(char*)data,len);
m_iWriteOffset+=len;
}
上面这个函数只是为了能过多次调用WriteData来把一些数据写到m_pData里
比如这样:
int x=10;
WriteData(&x,2);
char *str="abcd";
WriteData(str,5);
添加回答
举报