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

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

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

    so true

    心懷未來(lái),開(kāi)創(chuàng)未來(lái)!
    隨筆 - 160, 文章 - 0, 評(píng)論 - 40, 引用 - 0
    數(shù)據(jù)加載中……

    有關(guān)byte轉(zhuǎn)char、String的一些說(shuō)明

    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);
       這段代碼依然不能夠打印出我們期望的結(jié)果*/
       
       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;
     }
    }

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

     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);

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

     經(jīng)過(guò)以下方式轉(zhuǎn)碼就可以正確轉(zhuǎn)換了:

     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();
       }
      }
     }
    因此如果只是單純的使用它來(lái)作為一個(gè)中轉(zhuǎn)的用途,那就無(wú)所謂了,但是一旦涉及到和字符的轉(zhuǎn)化時(shí)就會(huì)有問(wèn)題,
    這里就暫且使用上述提到的方法,即重新構(gòu)造一個(gè)String對(duì)象,但是構(gòu)造String對(duì)象有著如下的從byte[]
    轉(zhuǎn)化為String類型的潛規(guī)則:
    如果byte里存儲(chǔ)的數(shù)據(jù)范圍是0~127時(shí),也就是字節(jié)的首位為0時(shí),就會(huì)將byte[]數(shù)組中的一個(gè)字節(jié)拿出來(lái)轉(zhuǎn)化為一個(gè)
    兩個(gè)字節(jié)的char類型,并把這個(gè)字符放到String中,如果范圍為-128~-1時(shí),也就是首位為1時(shí),就會(huì)自動(dòng)的把
    btye[]中下一個(gè)字節(jié)也拿出來(lái),讓這兩個(gè)字節(jié)組合成一個(gè)兩字節(jié)的char類型,然后存放到String中。從這里
    也可以看出一個(gè)潛規(guī)則,漢字表示成兩字節(jié)的二進(jìn)制時(shí),第一個(gè)字節(jié)肯定是負(fù)值。
    因此對(duì)于今天做的這個(gè)程序來(lái)說(shuō),想要把保存在byte[]中的IP地址數(shù)值直接拿出來(lái),需要人為的把byte中存儲(chǔ)的
    有符號(hào)數(shù)轉(zhuǎn)化為無(wú)符號(hào)數(shù)據(jù),用簡(jiǎn)單的位操作就可以實(shí)現(xiàn)了。
    (4)還需要說(shuō)明的一點(diǎn)是,java中沒(méi)有運(yùn)算符重載,對(duì)于String類所謂的+號(hào)可以連接字符串,其實(shí)只是在編譯器里面做了點(diǎn)手腳,
    并不是真正意義上的運(yùn)算符重載。
    (5)最后,還要說(shuō)明的是,要熟練的掌握String和各種數(shù)值類型之間的轉(zhuǎn)化方法:
    舉int型和String類型轉(zhuǎn)化的例子吧:
    int b --> String str:
    <1>str=""+b;
    <2>str=Integer.toString(b);//從int出發(fā),利用Integer包裝類實(shí)現(xiàn)
    <3>str=String.valueOf(b);//從str出發(fā),利用String類實(shí)現(xiàn)
    String str --> int b;
    b=Integer.parseInt(str);
    b=Integer.parseInt(str, int radix);
    最后,再對(duì)Integer.parseInt方法作一點(diǎn)說(shuō)明,str字符串只能為三種形式之一,即"[0-9]*"、"-[0-9]*"
    和"\u002D[0-9]*"兩種形式之一,其中負(fù)號(hào)'-'的ASCii碼就是\u002D,因此這兩種形式是等價(jià)的,除此之外
    的形式均非法,這里為了寫得簡(jiǎn)潔,使用了正則表達(dá)式的寫法[0-9]*表示任意長(zhǎng)度數(shù)字序列。
    */

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

    主站蜘蛛池模板: 毛片免费全部播放一级| 日韩中文字幕精品免费一区| 免费国产不卡午夜福在线| 一级毛片成人免费看免费不卡| 亚洲精品伊人久久久久| 91在线手机精品免费观看| 亚洲第一成年男人的天堂| 亚洲国产精品一区二区三区久久| 一级女人18片毛片免费视频| 久久久久亚洲AV无码专区首| 在线jyzzjyzz免费视频| 亚洲va国产va天堂va久久| 亚洲福利一区二区| 和老外3p爽粗大免费视频| 免费观看四虎精品国产永久| 老色鬼久久亚洲AV综合| 水蜜桃视频在线观看免费播放高清| 亚洲人成在线中文字幕| 亚洲熟妇无码八AV在线播放| 国产麻豆视频免费观看| 中文字幕的电影免费网站| 亚洲欧美日韩中文字幕一区二区三区| 激情综合色五月丁香六月亚洲| 在线观看人成视频免费| 中文字幕免费高清视频| 国产精品美女久久久免费 | 亚洲AV无码乱码在线观看富二代| 小小影视日本动漫观看免费| 蜜臀98精品国产免费观看| 中文字幕在线免费播放| 亚洲aⅴ天堂av天堂无码麻豆| 亚洲性色高清完整版在线观看| 国产亚洲午夜高清国产拍精品| 日本免费中文字幕在线看| 麻豆一区二区免费播放网站| 无码精品一区二区三区免费视频| 久草免费福利在线| 日韩久久无码免费毛片软件| 亚洲精品无码高潮喷水A片软| 精品亚洲AV无码一区二区三区 | 日本黄网站动漫视频免费|