首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • SOCKET传过来的byte数据怎么接收 [已结贴,结贴人:chengchaog]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chengchaog
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-19 10:54:41 楼主
    用的winsock的库

    我接收过来的都是字符串,因为要通过进制转换的,所以必须是byte【】的,
    我查了好久,都没有找到缓冲区为byte的接收函数,都是char的

    那个大大,可以写个列子给我,项目急的死
    我以前搞java,这次硬着头皮写,头痛死了
    90  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Lx_china
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 10:59:211楼 得分:5
    迷糊,char是8个字节,你接回来一位一位的拿出来用就行了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • coverallwangp
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 11:01:052楼 得分:5
    引用 1 楼 Lx_china 的回复:
    迷糊,char是8个字节,你接回来一位一位的拿出来用就行了


    你自己分一下不就是byte类型的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chengchaog
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 11:02:043楼 得分:0
    比如传过来的 88 1 221
    我收到是 881221
    大哥我不知道怎么分
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • coverallwangp
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 11:07:324楼 得分:5
    char 是8字节的

    如果是88 1 221的话,那么它的形式是0101 1000 0000 0001  1101 1101
    你只需要每次取八位就可以了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chengchaog
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 11:12:085楼 得分:0
    问题是,我接收是881221 要0101 之类的,我就不用发帖了
    LSD兄弟,知道,写个接收部分CODE
    谢谢啦
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zclever
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 11:19:206楼 得分:5
    一个char不就是1个字节吗??
    你要说的到底是bit还是byte?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chengchaog
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 11:22:207楼 得分:0
    我要收的是 byte数组
    但是好像没有缓存区是byte的,都是char的接收函数
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hqin6
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 11:24:428楼 得分:5
    自己写个函数,把char转换成byte
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chengchaog
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 11:29:509楼 得分:0
    各位大哥,写个列子吧,转换的或接收的,都可以
    就以88 1 221为列子
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • BMCRNET
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 11:37:3810楼 得分:5
    楼主可能还没有从java转到C/C++的思路上来!

    你把C语言好好要补补了!

    对计算机的最基础的东西不能丢掉啊!

    我有个疑问????

    一楼的,你们讨论的是什么CPU啊?
    char 的存储竟然达到8个byte???


    在32位系统上,一个char 是一个byte哈

    to楼主你接收过来字符串为什么换药转换啊?
    是什么字符串?十六进制?二进制?


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chengchaog
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 11:45:3611楼 得分:0
    LSD,应该是32位的系统

    比如88 1 221
    我接收过来的是"881221"
    问题是我88要进行转换成2进制的
    1也要转换,
    有对应的协议,有些的不用,传过来的都是10进制的

    我没办法知道从那里开始那里结束
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lkbl123
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 12:26:5012楼 得分:5
    路过,帮不上什么忙,不好意思啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chengchaog
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 14:09:5513楼 得分:0
    UP
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • henry3695
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 14:32:3614楼 得分:10
    用的winsock的库

    我接收过来的都是字符串,因为要通过进制转换的,所以必须是byte【】的,
    我查了好久,都没有找到缓冲区为byte的接收函数,都是char的

    那个大大,可以写个列子给我,项目急的死
    我以前搞java,这次硬着头皮写,头痛死了

    -----------------------------------------
    你先拿到这个串的首地址,说白了就是一个内存块的地址假设是 char *pBuff;
    BYTE *pByte = (BYTE *)pBuff;
    ok,这样你就可以处理了pByte 了啊

    指针是不是很方便啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chengchaog
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 15:29:4815楼 得分:0
    各位大大
    我收到一个char数组,或是字符串,但是我想收到的是byte的数组
    我想劈成一个个字节的,有什么函数或方法没有

    因为我还要按字节去处理下数据

    救命啊,项目超急,快疯了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • oakfire
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 15:58:1616楼 得分:5
    都莫名其妙,char与byte有啥本质区别? 就像14楼说的,直接把char* 弄成byte*不就行了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • babyvox1999
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 16:00:1717楼 得分:5
    一个char就是一个byte,很清楚。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Lx_china
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 17:03:2318楼 得分:10
    C++不会,Java更不会,为了万能的分...
    纠正下自己的错误,char占一个字节,8位
    C/C++ code
    #include <stdio.h> class BYTE { public: BYTE() { m_szpVal = NULL; } ~BYTE() { } bool operator [](int nSet) { int nVal; int nCur; int nBit; nCur = nSet>>3; nBit = 7 - (nSet % 8); nVal = *(m_szpVal + nCur); nVal = nVal >> nBit & 1; return nVal ? 1:0; } BYTE& operator =(char* szpBuff) { m_szpVal = szpBuff; return *this; } private: char* m_szpVal; }; int main() { BYTE cByte; char szaBuff[4] = {0}; *(int*)szaBuff = 0x1F2E3C4A; cByte = (char*)szaBuff; printf("BYTE:"); for(int i=0; i<32; i++) { if(i%4 == 0) printf(" "); printf("%d", cByte[i]); } printf("\n\n"); return 0; }

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Lx_china
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 17:08:3319楼 得分:5
    忘了提醒了,C语言是小端对其,和Java相反
    即0x1F 2E 3C 4A 在内存中的排列是4A 3C 2E 1F,你做通信,应该知道这个
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Darkneece
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 16:51:1320楼 得分:5
    typedef unsigned char byte

    这不就有 byte 了吗

    另,你接收到的是字符串还是数据串?

    如果接收到字符串的话
    你的意思是另一端传送了3次,数据分别是88 1 221?
    那你也分3次读,然后用atoi(char *)函数
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Darkneece
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 16:52:4121楼 得分:5
    引用 11 楼 chengchaog 的回复:
    LSD,应该是32位的系统

    比如88 1 221
    我接收过来的是"881221"
    问题是我88要进行转换成2进制的
    1也要转换,
    有对应的协议,有些的不用,传过来的都是10进制的


    2进制和10进制在内存里是没有任何区别的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qkhhxkj102
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 15:03:4622楼 得分:0
    收藏
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cang0lang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 15:22:3423楼 得分:5

    没看太明白,
    char和BYTE都是1个字节的,强制转换就应该能转了,用内存拷贝也行,
    你要是想处理每个bit位,(一个字节8个bit),
    用 < <  (向左移一位)  和 >>  (向右移一位)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lfm13720
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 18:58:2724楼 得分:0
    为什么说char 是8个字节?
    一个人说也许是说错了,但是有几个人都这么说啊。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • solaker
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 19:40:1825楼 得分:0
    一个char就是一个byte
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • solaker
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 19:40:4426楼 得分:0
    一个char就是一个byte
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ForestDB
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-26 15:26:1327楼 得分:0
    typedef unsigned char BYTE;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • god_sun
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-26 15:46:0128楼 得分:0
    lz想多了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xunfeng_2008
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-26 15:49:1029楼 得分:0
    所有数据保在内存里都是二进制呀!怎么处理就看你自己的需要了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jtacm
    • 等级:
    • 可用分等级:
    • 总技术分: