<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

    主站蜘蛛池模板: 亚洲 日韩 色 图网站| 亚洲精品无码永久中文字幕| 亚洲精品在线播放| 国产免费一区二区视频| 亚洲中文字幕无码爆乳AV| 九九热久久免费视频| 久久精品国产亚洲一区二区| 国产一区二区三区免费观在线| 亚洲免费观看视频| 久久久久久国产精品免费免费男同 | 亚洲av成人中文无码专区| 午夜一区二区免费视频| 亚洲AV无码一区二区三区性色| 国产精品成人四虎免费视频| 亚洲Av永久无码精品黑人 | 好爽…又高潮了免费毛片| 亚洲AV成人精品日韩一区| 亚洲高清免费视频| 成人性生交大片免费看中文| 亚洲AV电影院在线观看| 国产一卡二卡四卡免费| 亚洲精品无码高潮喷水A片软| 成人伊人亚洲人综合网站222| eeuss影院免费直达入口| 午夜亚洲www湿好大| 在线观看AV片永久免费| 视频一区在线免费观看| 国产av天堂亚洲国产av天堂| 噼里啪啦免费观看高清动漫4| 亚洲精品V天堂中文字幕| 色噜噜AV亚洲色一区二区| 久久这里只精品99re免费| 亚洲制服丝袜在线播放| 四虎影库久免费视频| 三年片在线观看免费西瓜视频 | 亚洲va中文字幕| 亚洲人成亚洲人成在线观看| 四虎最新永久免费视频| 在线观看亚洲专区| 久久亚洲私人国产精品| 免费一看一级毛片人|