关于将结构的内容,拷贝到char 指针中

bcj1983 2006-07-20 05:15:33
struct IM_LOGIN{
int UserID;
TUserState State;
bool HaveAudioDevice;
bool HaveVideoDevice;
DWORD LastActive;
};

char Buffer[4096];
char *p = Buffer;
IM_LOGIN Login;

memset(&Login,0,sizeof(Login));
p+= 12;
*((int*)p) = SM_IM_LOGIN;
p+= 4;

Login.UserID = 1001;
Login.State = sOnline;
Login.HaveAudioDevice = true;
Login.HaveVideoDevice = true;
Login.LastActive = GetTickCount();

//memcpy(p,&Login,sizeof(IM_LOGIN));
//memcpy(p,"sfsfasfdsfdf",12);
p= (char *)&Login;

this->m_pClientTCPThread->SendBuffer(p,16+sizeof(Login));
怎么p总是?号呢!应该怎么写呀!
...全文
218 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
勉励前行 2006-07-21
  • 打赏
  • 举报
回复
struct mystruct
{
char buff[12]; //12個字節放自己的東西
IM_LOGIN Login ;
};
char buff[sizeof(mystruct)] ;
IM_LOGIN Login ;
mystruct *p = (mystruct *)buff ;
*(p->Login ) = Login ;
p->buff 是你自己要放的內容。

C++是與數據密切相關的語言,先定義好自己的數據結構,寫代碼的時候思路才會清楚。
這樣的代碼才會易讀,過多的強制轉換會使程序難讀。
bcj1983 2006-07-21
  • 打赏
  • 举报
回复
*((int*)p) = SM_IM_LOGIN;
TO:楼上的兄弟.
哪我这个标识怎么加上呀!!而且还要空12个字节.也就是从12个字节后面开始是数据.
勉励前行 2006-07-21
  • 打赏
  • 举报
回复
将结构的内容,拷贝到char 指针中:
struct IM_LOGIN{...};
char buff[sizeof(IM_LOGIN)+sizeof(IM_LOGIN*)]; //分配空間
IM_LOGIN Login ;
Login.UserID = 1001;
Login.State = sOnline;
Login.HaveAudioDevice = true;
Login.HaveVideoDevice = true;
Login.LastActive = GetTickCount();
IM_LOGIN **p = (IM_LOGIN **)buff ;
*p = &Login ;
IM_LOGIN *p = (IM_LOGIN *)(buff + sizeof(IM_LOGIN *)) ;
//下面這兩個方法可能會有不同的結果,請自行確認需要哪一種。
*p = Login ; //復制 Login 到指定地方去。
memcpy(p,&Login ,sizeof(Login));//復制 Login 到指定地方去。
bcj1983 2006-07-21
  • 打赏
  • 举报
回复
memcpy(p,&Login,sizeof(IM_LOGIN));
这样写不可以吗?
bcj1983 2006-07-21
  • 打赏
  • 举报
回复
我不光发结构的.我发送的是标识加结构.
to:楼上,你只发送结构,标识怎么加呢!
痞子酷 2006-07-21
  • 打赏
  • 举报
回复
this->m_pClientTCPThread->SendBuffer(p,16+sizeof(Login));
----------------------------------------------------
this->m_pClientTCPThread->SendBuffer(& Login,sizeof(Login));
痞子酷 2006-07-21
  • 打赏
  • 举报
回复
char Buffer[4096];
IM_LOGIN Login;
---------------------
memcpy(&Buffer,&Login,sizeof(Login));
bcj1983 2006-07-21
  • 打赏
  • 举报
回复
p总是指向指针的最后.当然是问号了呀!哈哈!!!
勉励前行 2006-07-21
  • 打赏
  • 举报
回复
Login.UserID = 1001;
p= (char *)&Login; //指向Login的第一個字節 該是 int 1001 的第一個字節。
那麼 *p 是什麼?
顯示出來就是一個 ? 了
bcj1983 2006-07-21
  • 打赏
  • 举报
回复
哪我的写法.哪里不对呀!为什么p值总是问号呢?
jiangshx 2006-07-20
  • 打赏
  • 举报
回复
p= (char *)&Login;这句有问题
参照你上面的那句*((int*)p) = SM_IM_LOGIN;
这样合理(int*)p=(int*)&Login;

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧