冬瓜ID:mudboy
86126次访问,排名1071好友0人,关注者0
没有填写个人简介
mudboy的文章
原创 96 篇
翻译 0 篇
转载 14 篇
评论 58 篇
mudboy的公告
最近评论
sun:楼主写的不错,朴实感人,注意些错白字.
dsfaf:感觉购房前最好是请个专业的律师!
asdfa:不错,加油!
mldstk:wow power leveling
zll:我现在也买房呢 怎么没早点看到你的经历 我现在自己办贷款 但中介不同意说不给过户
文章分类
收藏
    相册
    mudboy的更多照片(more...)
    家中菜品
    手工作品
    我的家乡-客家小山村(06年春节)
    在香港
    blog life
    about mudboy(RSS)
    open source
    ACE
    Apache
    codehaus
    cs opensource
    huihoo
    java开源大全
    jboss
    opensymphony
    sourceforge
    共创联盟
    research
    Agile Askme(QA)
    mindswap(about owl)
    Ontology搜索(WI OntoSearch)
    start(QA System)
    技术BLOG
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    转载 网络字节顺序 流操作收藏

    新一篇: JSP生成验证码源程序 | 旧一篇: 20050607

    以前的一个基于SOCKET的报文传输项目,让我知道了什么叫网络字节顺序。在C函数中,有一系列函数支持,如:htons函数(host to net )见:winsock.h。总的意思是:不同的操作系统对 long , doulbe 等的内码字节顺序存储不一样。因此,一般情况下需要转为统一的网络字节顺序才在网络中传输。如:对两个字节长度的整型,使用java转为网络字节顺序的代码为:

      public static byte[] hexToNet(int i) {
        byte[] bt = new byte[2];
        bt[1] = (byte) (i & 0xFF); // 底8位
        bt[0] = (byte) ( (i >> 8) & 0xFF); // 高8位。
        return bt;
      }
     ---------------------------------

       周二,我们又碰到了基于TUXEDO的CARRY类型的报文传输。其中要把某位字节值填上0x80。我想使用log4j把这值输出到文本文件来查看。于是使用 new String(b)后输出,使用UltraEdit-32 打开这个日志文本文件,查看ASCII码,发现是:0x3f。而不是想要的0x80

    ----------------------------------

      使用C来写,是对的,代码如下:

    // mytest.cpp : Defines the entry point for the console application.
    #include "stdafx.h"
    #include <string.h>
    #include <sys/types.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <winsock.h>

    int main(int argc, char* argv[])
    {
        FILE *fp = fopen("D:\\my.txt", "a");
        unsigned short us1 ;
        us1 = (unsigned short)strlen("PLC001") | 0x08000;
        u_short   us = htons(us1);
        printf("(short)strlen(\"PLC001\") | 0x08000 =%d\n",us1);
        fprintf(fp,"%s",&us,sizeof(u_short));
        fclose(fp);
        return 0;
    }

     ------------------------------------------------------------------------------

       后来经朋友指点,要使用流来输出,而不是log4j的输出。才解决了这个问题:

          FileOutputStream fos = null;
          File myFile = new File("D:\\test.txt");
          byte[] b = new byte[1];
          b[0] = (byte)0x80;
          try{
            if (!myFile.exists()) {
              myFile.createNewFile();
            }
            fos = new FileOutputStream(myFile);
            fos.write(b);
          }
          catch (Exception e) {
            e.printStackTrace();
          }

          这时看日志文件,才看到想要看到的结果:0x80
    -------------------------------------------------------------------------------

        感悟:对java,对字节流处理的基础功课,还真得补一补!

     今天,分析了一下 TUXEDO的CARRY ,其实也是由 byte[]组成的。因此,在网络传输中,肯定也是以 socket的DataOutputStream之类的来 wrrite(byte[])。

    发表于 @ 2005年06月07日 15:19:00|评论(loading...)|编辑

    新一篇: JSP生成验证码源程序 | 旧一篇: 20050607

    评论

    #KK 发表于2008-03-31 13:34:17  IP: 210.13.96.*
    java本身不就是网络字节顺序的吗?为什么还要多此一举的转换阿?
    #mudboy 发表于2008-03-31 16:38:56  IP: 123.121.197.*
    当你想在JAVA和C/c++的程序之间传递数据时,就会有很多东西要考虑了,你所说的是JAVA同JAVA之间,是无需考虑的
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © mudboy