关于网友提出的“ 如何将char和unsigned long转换成位传送?支持者有分!”问题疑问,本网通过在网上对“ 如何将char和unsigned long转换成位传送?支持者有分!”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 如何将char和unsigned long转换成位传送?支持者有分!描述:
如何将char和unsigned long转换成位传送?
比如char *p="abcd";
unsigned long ul=98888231;
如果将他们转换为字符则会使发送的数据量增大,转换成位后就会小些。
解决方案1:
就是按内存里存放的内容传就行了。。。
long sss=10000;
send(socket,(char *)sss,4);
很简单,C中的指针是可以做不同的转换的,可以如下做
unsigned long uli=33333333333;
char abc[] = "abcd";
send((char *)&uli, sizeof(uli));
send(abc, sizeof(abc));
一个unsigned long占4个字节,与四个字符是一样的,只要将它的地址强制转换为char *后给send函数即可,不需要使用memcpy来回拷贝
用memcpy很方便的呀
解决方案4:up
解决方案5: 在这里问问大虾们,如果我要发送一个对象可不可以,如果可以的话,在客户端怎么收?
比如
class Foo
{
...
}
Foo foo=new Foo();
那么怎么发送这种引用型对象?
在客户端,怎么接受再还原为一个对象
怎么这个也是问题啊?你把unsigned long 转化成4个字节的字符数组发送不就行了吗?高字节在前还是低字节在前自己定啊!
解决方案7: unsigned long uli=33333333333;
char abc[20];
abc=_uitoa(uli,cbc,10);
send(abc,...); //通过socket发送,这样原本较短的数据就变得较长了
可改为:
unsigned long uli=33333333333;
char abc[20];
memcpy(abc, &uli, sizeof(uli));
send(abc, sizeof(uli));
注发送长度应指定为sizeof(uli)或sizeof(unsigned long)
呵呵 传送的时候都是传的2进制,上面的那些只是你看到的而已,如果电脑都用2进制表示了 你还能看的懂??
解决方案9:
*(buff+22) = '1';
希望对你有帮助:
char buff[128];
CString talkstr;
short namelen,talklen,sendbufflen;
CString str,showtalkstr;
m_talkCnt.GetWindowText(talkstr);
showtalkstr = talkstr;
strcpy(buff, "SCPCRSSS");
namelen = m_UserName.GetLength();
*(short *)(buff+8) = namelen;
talklen = talkstr.GetLength();
*(short *)(buff+10) = talklen;
*(DWORD *)(buff+12) = talkFontClr;
talkstr = m_UserName + talkstr;
sendbufflen = 16 + namelen + talklen;
strcpy(buff+16, talkstr);
m_talkServerSocket.Send(buff, sendbufflen);
sp
解决方案12:up
解决方案13:应该都是按位传送的啊
解决方案14: 可参照如下:
struct sendstru
{
char a;
long l;
}
...
sendstru.a = 'Z';
sendstru.l = 234322;
...
socket.send( (char *)&sendstru );
...