<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    so true

    心懷未來,開創未來!
    隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
    數據加載中……

    有關byte轉char、String的一些說明

    package com.bacoo.www;

    import java.applet.*;
    import java.net.*;

    public class InetAddDemo extends Applet{
     public void test(){
      try{
       InetAddress add=InetAddress.getLocalHost();
       System.out.println(add.getHostAddress());
       System.out.println(add.getHostName());
       System.out.println(InetAddress.getLocalHost());
       System.out.println(add.hashCode());
       byte [] b= add.getAddress();
       
       /*ByteArrayInputStream bais=new ByteArrayInputStream(b);
       InputStreamReader isr=new InputStreamReader(bais);
       BufferedReader br=new BufferedReader(isr);
       char [] ch=new char[b.length];
       br.read(ch);
       System.out.println(ch);
       這段代碼依然不能夠打印出我們期望的結果*/
       
       String s = "12345abcd";
       byte b2[] = s.getBytes();
       System.out.println(b2.toString());
       
       String s1="d我3a你2";
       byte [] s2=s1.getBytes();
       String s3=new String (s2);
       System.out.println(s3);
       String tt=new String(b);
       System.out.println(tt);
       System.out.println(Bytes2String(b));
       System.out.println(add.toString());
      }catch(Exception e){
       System.out.println(e.getMessage());
      }
     }
     
     public void init(){
      test();
     }
     
     public String Bytes2String(byte [] b){
      String str="";
      for(int i=0;i<b.length;i++){
       int t=(b[i]<<24)>>>24;
       str+=Integer.toString(t)+".";
      }
      str=str.substring(0, str.length()-1);
      return str;
     }
    }

    /*說明:
    (1)java中定義變量并不需要賦予初始值,系統自動為其賦0值或null,但是這僅限于在類中定義的屬于類的類變量,
    而對于在類函數中定義的臨時變量,則必須要賦初始值,否則會出錯的!
    (2)位運算賦默認的兩端都是int型變量,而且返回值也是int型的。如果在位運算符的兩端有一個變量為long型,則返回值也為long型。
    (3)對于byte類型,比較特殊,首先它是整型,而且只有一個字節長度,而且是有符號的,這里需要特別說明的是
    java中不會區分無符號和有符號,既然byte是一個字節的有符號數,那它的表示范圍就是-128~127,但是我們經常會把byte作為
    單字節的容器,比如在文件讀寫時,或作為緩沖區時都是使用byte這種類型,如果要把byte轉化為字符時就會有問題,
    比如:例如下面一個例子:

     import java.io.UnsupportedEncodingException;

     public class test{
      public static void main(String g[]) {
       String s = "12345abcd";
       byte b[] = s.getBytes();
       String t = b.toString();

       System.out.println(t);

      }
     }
     輸出字符串的結果和字符串s不一樣了.
     這是因為對于byte[]類型,它也是Object的子類,但是數組這種特殊的子類并沒有特別的實現自己的toString()方法,因此我們調用
     "b.toString()"后,實際上還是調用了Object父類里的toString方法<函數體內的具體代碼是:
     getClass().getName() + "@" + Integer.toHexString(hashCode())>,該方法只是返回了該類的Name+@+hashCode而已!
     有意思的是,對于數組類,類名字是在"["后緊跟數組的類型,比如這里返回的就是"[B",呵呵,挺有趣吧?

     經過以下方式轉碼就可以正確轉換了:

     public class test{
      public static void main(String g[]) {
       String s = "12345abcd";
       byte b[] = s.getBytes();
       try {
        String t = new String(b);
        System.out.print(t);
       } catch (Exception e) {
        e.printStackTrace();
       }
      }
     }
    因此如果只是單純的使用它來作為一個中轉的用途,那就無所謂了,但是一旦涉及到和字符的轉化時就會有問題,
    這里就暫且使用上述提到的方法,即重新構造一個String對象,但是構造String對象有著如下的從byte[]
    轉化為String類型的潛規則:
    如果byte里存儲的數據范圍是0~127時,也就是字節的首位為0時,就會將byte[]數組中的一個字節拿出來轉化為一個
    兩個字節的char類型,并把這個字符放到String中,如果范圍為-128~-1時,也就是首位為1時,就會自動的把
    btye[]中下一個字節也拿出來,讓這兩個字節組合成一個兩字節的char類型,然后存放到String中。從這里
    也可以看出一個潛規則,漢字表示成兩字節的二進制時,第一個字節肯定是負值。
    因此對于今天做的這個程序來說,想要把保存在byte[]中的IP地址數值直接拿出來,需要人為的把byte中存儲的
    有符號數轉化為無符號數據,用簡單的位操作就可以實現了。
    (4)還需要說明的一點是,java中沒有運算符重載,對于String類所謂的+號可以連接字符串,其實只是在編譯器里面做了點手腳,
    并不是真正意義上的運算符重載。
    (5)最后,還要說明的是,要熟練的掌握String和各種數值類型之間的轉化方法:
    舉int型和String類型轉化的例子吧:
    int b --> String str:
    <1>str=""+b;
    <2>str=Integer.toString(b);//從int出發,利用Integer包裝類實現
    <3>str=String.valueOf(b);//從str出發,利用String類實現
    String str --> int b;
    b=Integer.parseInt(str);
    b=Integer.parseInt(str, int radix);
    最后,再對Integer.parseInt方法作一點說明,str字符串只能為三種形式之一,即"[0-9]*"、"-[0-9]*"
    和"\u002D[0-9]*"兩種形式之一,其中負號'-'的ASCii碼就是\u002D,因此這兩種形式是等價的,除此之外
    的形式均非法,這里為了寫得簡潔,使用了正則表達式的寫法[0-9]*表示任意長度數字序列。
    */

    posted on 2007-12-28 22:58 so true 閱讀(6853) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 亚洲综合亚洲综合网成人| 久久午夜夜伦鲁鲁片免费无码影视| 亚洲一卡2卡3卡4卡5卡6卡| 亚洲av乱码一区二区三区 | 免费A级毛片无码A∨免费| 亚洲a一级免费视频| 在线观看的免费网站无遮挡| 59pao成国产成视频永久免费| 4399影视免费观看高清直播| 成人福利免费视频| 毛片免费在线观看网站| 成在线人永久免费视频播放 | 十八禁在线观看视频播放免费| 最近免费中文字幕中文高清| 午夜视频免费在线观看| 亚洲性线免费观看视频成熟 | 99久久国产免费中文无字幕| 国产精彩免费视频| 成年女人免费视频播放77777| 日韩在线免费电影| 亚洲精品乱码久久久久久不卡| 亚洲色成人中文字幕网站| 亚洲AV成人精品网站在线播放| 亚洲国产情侣一区二区三区| 亚洲精品无码你懂的| 国产福利免费视频| 91在线手机精品免费观看| 久久精品女人天堂AV免费观看| 国产免费人视频在线观看免费| 亚洲中文字幕在线乱码| 精品日韩亚洲AV无码一区二区三区| 久久亚洲精品专区蓝色区| 日产久久强奸免费的看| 免费h视频在线观看| 免费精品国偷自产在线在线 | 免费人成在线观看网站| 99久久久精品免费观看国产 | 四虎精品视频在线永久免费观看| 成人毛片免费观看视频在线| 亚洲欧洲久久av| 亚洲精品在线视频观看|