c++怎么在char数组里存储int

c++如何在char数组里存储int
c++里的代码:
char sendBuf[100] = {0};
int type=1;
int len=4;
想在sendBuf里保存type,len两个int变量,该如何操作?
cSocket.Send(sendBuf, strlen(sendBuf)+1, 0);

java用IOBuffer.getInt来直接获取type,len的值

试过很多方法,像itoa,sprintf(sendBuf,"%d%d",type,len),sprintf(sendBuf,"%4X%4X",type,len)都没有用
------解决方案--------------------
引用:
Quote: 引用:

sprintf(sendBuf,"%d%d',type,len);

试过了,不行,java那边获取的是31,34


大哥那个是ascii字符,好吗~~~你要转换啊~~
------解决方案--------------------
楼主不就是想发送数据嘛。给你说一下我在项目中的做法:

#prama pack(1);

struct Msg
{
  int a;
  int b;
}

char Data[100];
Msg* pData=(Msg*)Data
pData->a=123456;
pData->b=67890;

send(sock,pData,sizeof(Msg));//在java端用同样的结构体接收回来。或者按4个字节一个数据转换成int.
------解决方案--------------------
vs2010 测试通过
#include <iostream>

using namespace std;

void int_save_for_byte_arr(char* pa, int i)
{
unsigned char i_0_7 = i & 0x000000FF;
unsigned char i_8_15 = (i & 0x0000FF00) >> 8;
unsigned char i_16_23 = (i & 0x00FF0000) >> 16;
unsigned char i_24_31 = (i & 0x00FF0000) >> 24;

pa[0] = i_0_7;
pa[1] = i_8_15;
pa[2] = i_16_23;
pa[3] = i_24_31;

return;
}

int main(int argc, _TCHAR* argv[])
{
char sendBuf[100] = {0};
int type=1;
int len=4;

int_save_for_byte_arr(sendBuf, type);
int_save_for_byte_arr(sendBuf + 4, len);

cout << "type = " << *((int *)sendBuf) << endl;
cout << "len = " << *((int*)(sendBuf+4)) << endl;

::getchar();
return 0;
}
------解决方案--------------------


引用:
Quote: 引用:

楼主不就是想发送数据嘛。给你说一下我在项目中的做法:

#prama pack(1);

struct Msg
{
  int a;
  int b;
}

char Data[100];
Msg* pData=(Msg*)Data
pData->a=123456;
pData->b=67890;

send(sock,pData,sizeof(Msg));//在java端用同样的结构体接收回来。或者按4个字节一个数据转换成int.


你说的感觉很复合面向对象的规则,我试过了,但是数据被截断了,是不是要大小端转换下?

数据为什么会被截断?数据截断和大小端没有关系,是你没有收完整吗?
------解决方案--------------------
引用:
Quote: 引用:



Quote: 引用:

Quote: 引用:

楼主不就是想发送数据嘛。给你说一下我在项目中的做法:

#prama pack(1);

struct Msg
{
  int a;
  int b;
}

char Data[100];
Msg* pData=(Msg*)Data
pData->a=123456;
pData->b=67890;

send(sock,pData,sizeof(Msg));//在java端用同样的结构体接收回来。或者按4个字节一个数据转换成int.


你说的感觉很复合面向对象的规则,我试过了,但是数据被截断了,是不是要大小端转换下?

数据为什么会被截断?数据截断和大小端没有关系,是你没有收完整吗?


struct Msg
{
int type;
int userNamelen;
};
Msg* pData = (Msg*)sendBuf;
pData->type = 1;
pData->userNamelen = 4;
结果java收到的是 01,后面的应该都被截断了


这句加上没有?
#prama pack(1);

另外你发送的字节数是多少?接收的字节数又是多少,两者是否一致?
你确定是网络包已经被完整发送和接收了?
你应该用抓包软件好好看一下才知道怎么回事,你这样子调试程序,和瞎猜有什么区别?
------解决方案--------------------
楼主可以了解一下大小端字节序和网络字节序。搜一下Java字节序,可以看到Java采用大端字节序,正是网络字节序。
C++的话,根据平台而定。所以要做的是先将数值转换成网络字节序再发送。C++发送端代码如下:

    int type = 1;
    int ntype = htonl(type);//转换成网络字节序

    char bytes[10];
    memcpy(bytes, &ntype, sizeof(int));

    socket.send(bytes, sizeof(int), 0);

由于Java端直接读取即可
------解决方案--------------------
引用:
建议楼主先学会使用抓包软件如wireshark

发现,你还正他们说的那样,动不动就复制黏贴类型的专家?你这样指导别人,别人寻求一个答案,你让别人去研究wirshark抓包工具,这不是坑别人新人么,,你这样动不动就划个大方向给别人,会让别人乱了马脚,让别人面对问题不知所措,盲目去研究抓包工具
------解决方案--------------------
引用:
Quote: 引用:

建议楼主先学会使用抓包软件如wireshark

发现,你还正他们说的那样,动不动就复制黏贴类型的专家?你这样指导别人,别人寻求一个答案,你让别人去研究wirshark抓包工具,这不是坑别人新人么,,你这样动不动就划个大方向给别人,会让别人乱了马脚,让别人面对问题不知所措,盲目去研究抓包工具

公婆之间socket通讯,有了矛盾,公说公有理,婆说婆有理。
谁来当裁判?
唯有抓包工具比如wireshark!
c++怎么在char数组里存储int