如何将byte数组转换成char数组

jt_hym 2010-09-01 12:12:34
我用c++(VS2008编译器)写的服务器,会接收到C#客户端传过来的byte数组。请问如何把byte数组转成char数组?
...全文
2477 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
jt_hym 2010-09-02
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 dream238 的回复:]
nRecvBytes = sockRecv.Receive( recv_byte, sizeof(recv_buf) );
memcpy(recv_buf,recv_byte,sizeof(recv_byte));
收到多少拷贝多少
nRecvBytes = sockRecv.Receive( recv_byte, sizeof(recv_buf) );
if (nRecvBytes > ……
[/Quote]

C#中用流写入

//发送数组byte[24]
networkSendStream.Write(userinfo, 0, userinfo.Length );

我在C++的服务器中接收
//nRecvBytes 等于4,只收到4个字节,这是为什么?
nRecvBytes = sockRecv.Receive( recv_byte, sizeof(recv_buf)
码侬 2010-09-01
  • 打赏
  • 举报
回复
强制类型转换
向立天 2010-09-01
  • 打赏
  • 举报
回复
直接用unsigned char接收处理
qiangorqiang 2010-09-01
  • 打赏
  • 举报
回复
不用转换,C#的byte就是C的char.
wltg2001 2010-09-01
  • 打赏
  • 举报
回复
不行用for循环一个一个的传过来不就行了。
ArcRain 2010-09-01
  • 打赏
  • 举报
回复
知道收到的字节数,直接memcpy到char数组里就好了.
ArcRain 2010-09-01
  • 打赏
  • 举报
回复
nRecvBytes = sockRecv.Receive( recv_byte, sizeof(recv_buf) );
memcpy(recv_buf,recv_byte,sizeof(recv_byte));
收到多少拷贝多少
nRecvBytes = sockRecv.Receive( recv_byte, sizeof(recv_buf) );
if (nRecvBytes > 0)
memcpy(recv_buf,recv_byte, nRecvBytes);

结构体的话byte[]强制转换就行了。
YBUserLoginPkt* ptr = (YBUserLoginPkt*)recv_byte;


用户 昵称 2010-09-01
  • 打赏
  • 举报
回复
一回事吧。
jt_hym 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 xianglitian 的回复:]
引用 14 楼 jt_hym 的回复:
主要问题是传过来的是通过结构体转过来的byte[],我在c++中怎么还原成原来的结构体?

按着它的结构体自己定义一个一模一样即可
[/Quote]

我是定义一个与其对应的结构体,但不知道如何将byte数组转换成对应的结构体?
有大虾帮帮我不?
向立天 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 jt_hym 的回复:]
主要问题是传过来的是通过结构体转过来的byte[],我在c++中怎么还原成原来的结构体?
[/Quote]
按着它的结构体自己定义一个一模一样即可
jt_hym 2010-09-01
  • 打赏
  • 举报
回复
主要问题是传过来的是通过结构体转过来的byte[],我在c++中怎么还原成原来的结构体?
柏毅 2010-09-01
  • 打赏
  • 举报
回复
char *recbuf;
recbuf = new char[100];
byte *Sendbuf;
recbuf = new byte[100];
memcpy(recbuf,Sendbuf,100);
jt_hym 2010-09-01
  • 打赏
  • 举报
回复
C#客户端代码
YBUserLoginPkt user_login_pkt;
user_login_pkt.ePacketType = PACKET_TYPE.PACKET_TYPE_USER_LOGIN;
user_login_pkt.user_ip = USER.PSIp; //用户IP地址
user_login_pkt.user_name = USER.PSloginname; //用户名
user_login_pkt.user_password = USER.PSpassword; // 用户密码,用于验证是否正确
user_login_pkt.user_type = USER.type; // 普通用户或加盟店
user_login_pkt.last_logtime = USER.PSlastlogtime; //最后登录时间
byte[] userinfo = StructToBytes(user_login_pkt);//将结构体转成byte[],这个函数没问题
networkSendStream.Write(userinfo, 0, userinfo.Length);//发送数组


c++服务器
char recv_buf[NET_BUFFER_SIZE] = {0};
byte recv_byte[NET_BUFFER_SIZE] = {0};
int nRecvBytes = 0;
while (TRUE)
{
YBServerSocket sockRecv;
if( listen_sock_.Accept( sockRecv, (SOCKADDR*)&addrAccp, &len) == 0 )
{
cout<<"Accept 错误:"<<listen_sock_.GetLastError()<<endl;
return;
}
else
{
cout<<"Accept 正确!"<<endl;
}
]);
//这里recv_byte收到的就是乱码,怎么回事?
nRecvBytes = sockRecv.Receive( recv_byte, sizeof(recv_buf)
memcpy(recv_buf,recv_byte,sizeof(recv_byte));
……
}

senlinzhiwang 2010-09-01
  • 打赏
  • 举报
回复
楼上的都说的很全面了!
jt_hym 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dream238 的回复:]
知道收到的字节数,直接memcpy到char数组里就好了.
[/Quote]
char recv_buf[NET_BUFFER_SIZE] = {0};
byte recv_byte[NET_BUFFER_SIZE] = {0};
int nRecvBytes = 0;
while (TRUE)
{
YBServerSocket sockRecv;
if( listen_sock_.Accept( sockRecv, (SOCKADDR*)&addrAccp, &len) == 0 )
{
cout<<"Accept 错误:"<<listen_sock_.GetLastError()<<endl;
return;
}
else
{
cout<<"Accept 正确!"<<endl;
}
nRecvBytes = sockRecv.Receive( recv_byte, sizeof(recv_buf) );
memcpy(recv_buf,recv_byte,sizeof(recv_byte));
……
}
recv_buf得到的是乱码。
jt_hym 2010-09-01
  • 打赏
  • 举报
回复
(知道收到的字节数,直接memcpy到char数组里就好了)
//用户登录服务器
public struct YBUserLoginPkt
{
YBUserLoginPkt(PACKET_TYPE pkttype, string username,
string userpwd, USER_TYPE usertype,string logtime)
{
//PACKET_TYPE_USER_LOGIN
ePacketType = pkttype;
user_ip = "127.0.0.1";
user_name = username;
user_password = userpwd;
user_type = usertype;
last_logtime = logtime;
}
public PACKET_TYPE ePacketType; // 包类型
public string user_ip; //用户IP地址
public string user_name; //用户名
public string user_password; // 用户密码,用于验证是否正确
public USER_TYPE user_type; // 普通用户或加盟店
public string last_logtime; //最后登录时间
};
这个在c#中转成byte[]的size是24,在vc中打算出来是72,怎么解释?
jt_hym 2010-09-01
  • 打赏
  • 举报
回复
但是我要把接受过来的数组转换成结构体,这个怎么处理?
Allen_zhang 2010-09-01
  • 打赏
  • 举报
回复
如果你确认传过来的数据是字符串的话,强制转换就行了。
m_tornado 2010-09-01
  • 打赏
  • 举报
回复
不是一回事么?~

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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