求助:CString与结构体转换

时间:2022-08-17 20:53:59
自定义了一个结构体,

怎样将结构体转换成CString或Char*类型呢?

转换的目的是将结构体变成的CString 通过网络进行数据传递

谢谢哦~~

10 个解决方案

#1


widechartomultibyte()
基本介绍及功能
  WideCharToMultiByte   函数功能:该函数映射一个unicode字符串到一个多字节字符串。   函数原型:int WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPWSTR lpWideCharStr, int cchWideChar, LPCSTR lpMultiByteStr, int cchMultiByte, LPCSTR lpDefaultChar, PBOOL pfUsedDefaultChar );   参数:   CodePage:指定执行转换的代码页,这个参数可以为系统已安装或有效的任何代码页所给定的值。你也可以指定其为下面的任意一值:   CP_ACP:ANSI代码页;CP_MACCP:Macintosh代码页;CP_OEMCP:OEM代码页;   CP_SYMBOL:符号代码页(42);CP_THREAD_ACP:当前线索ANSI代码页;   CP_UTF7:使用UTF-7转换;CP_UTF8:使用UTF-8转换。   dwFlags [in] Specifies the handling of unmapped characters. The function performs more quickly when none of these flags is set. The following flag constants are defined. 

#2


怎样将结构体转换成CString或Char*类型呢?
-----------------------------------
指针允许这样强制转换,一种类型的指针强制转换为另外一种类型的指针

#3


网络上传输的类型需要时基本的可序列化的类型。你可以用mfc中标准的序列化方法进行类型到流的转换。

#4


FuncSendYourStruct(char *);

STRUCT_REQUEST youStruct;

FuncSendYourStruct(szYouStruct)
{
  STRUCT_REQUEST *pyouStruct = (STRUCT_REQUEST *)szYouStruct;
  int nLen = sizeof(STRUCT_REQUEST);
  
  char szCmd[BUF_SIZE_CMD];            //szCmd用了储存你的要发送的数据
  int iPos = 0;
  memcpy(szCmd, (void*)pyouStruct, nLen);
  iPos += nLen;
  send(m_hSocket, (LPCTSTR)lpszBuf, nBufLen, 0);
}

不知道对不对,我是这么想的哦,互相学习

#5


直接把结构体的值用一个分隔符分开就可以了吧

#6


转换成char *没问题,CString就免了吧,CString遇到'\0'会怎么样?

#7


看看 Google protol buf

自己设计个.proto 文件转成 proto-buf对象, 然后直接转成 byte array 或者 stream 在网络传输,
对方再根据你的.proto 文件解析回来

#8


引用 2 楼 visualeleven 的回复:
怎样将结构体转换成CString或Char*类型呢?
-----------------------------------
指针允许这样强制转换,一种类型的指针强制转换为另外一种类型的指针

可惜转换的不对
结构体转换成Char *,指针是结构体的首地址。值为空

#9


自己写个数据流的类, 用重载运算符"<<"和">>",对基本的数据类型进行重载,这个是基类。以后还可以用的。

然后在写个类继承它,对你要发送的结构体进行重载。


具体的去看看MFC中Cstring类是怎么实现的。模仿它就行了 。

#10


说错了 ,  是这个类CArchive!!!

#1


widechartomultibyte()
基本介绍及功能
  WideCharToMultiByte   函数功能:该函数映射一个unicode字符串到一个多字节字符串。   函数原型:int WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPWSTR lpWideCharStr, int cchWideChar, LPCSTR lpMultiByteStr, int cchMultiByte, LPCSTR lpDefaultChar, PBOOL pfUsedDefaultChar );   参数:   CodePage:指定执行转换的代码页,这个参数可以为系统已安装或有效的任何代码页所给定的值。你也可以指定其为下面的任意一值:   CP_ACP:ANSI代码页;CP_MACCP:Macintosh代码页;CP_OEMCP:OEM代码页;   CP_SYMBOL:符号代码页(42);CP_THREAD_ACP:当前线索ANSI代码页;   CP_UTF7:使用UTF-7转换;CP_UTF8:使用UTF-8转换。   dwFlags [in] Specifies the handling of unmapped characters. The function performs more quickly when none of these flags is set. The following flag constants are defined. 

#2


怎样将结构体转换成CString或Char*类型呢?
-----------------------------------
指针允许这样强制转换,一种类型的指针强制转换为另外一种类型的指针

#3


网络上传输的类型需要时基本的可序列化的类型。你可以用mfc中标准的序列化方法进行类型到流的转换。

#4


FuncSendYourStruct(char *);

STRUCT_REQUEST youStruct;

FuncSendYourStruct(szYouStruct)
{
  STRUCT_REQUEST *pyouStruct = (STRUCT_REQUEST *)szYouStruct;
  int nLen = sizeof(STRUCT_REQUEST);
  
  char szCmd[BUF_SIZE_CMD];            //szCmd用了储存你的要发送的数据
  int iPos = 0;
  memcpy(szCmd, (void*)pyouStruct, nLen);
  iPos += nLen;
  send(m_hSocket, (LPCTSTR)lpszBuf, nBufLen, 0);
}

不知道对不对,我是这么想的哦,互相学习

#5


直接把结构体的值用一个分隔符分开就可以了吧

#6


转换成char *没问题,CString就免了吧,CString遇到'\0'会怎么样?

#7


看看 Google protol buf

自己设计个.proto 文件转成 proto-buf对象, 然后直接转成 byte array 或者 stream 在网络传输,
对方再根据你的.proto 文件解析回来

#8


引用 2 楼 visualeleven 的回复:
怎样将结构体转换成CString或Char*类型呢?
-----------------------------------
指针允许这样强制转换,一种类型的指针强制转换为另外一种类型的指针

可惜转换的不对
结构体转换成Char *,指针是结构体的首地址。值为空

#9


自己写个数据流的类, 用重载运算符"<<"和">>",对基本的数据类型进行重载,这个是基类。以后还可以用的。

然后在写个类继承它,对你要发送的结构体进行重载。


具体的去看看MFC中Cstring类是怎么实现的。模仿它就行了 。

#10


说错了 ,  是这个类CArchive!!!