Weil Jimmer's BlogWeil Jimmer's Blog


Java【解決方法】Byte[]、UByte[]的問題 Byte有負號

No Comments
-
更新於 2016-01-06 18:37:17

    String str = "這是測試!ABC123.";
    byte[] bytes = {};
    try {
        bytes = str.getBytes("UTF-8");
    }catch(Exception ex){
    }
    for(int i=0;i<bytes.length;i++){
        System.out.println(bytes[i]);
    }
    System.out.println(bytes);

我們都知道,其實,Java裡面本身並不支援Ubyte。若真要使用差不多的功能,建議可以改用Short。

Ubyte就是沒有負號,而Byte就是可能會有負號。跟轉成二進制之後的高位補數與否有關係的樣子。

在此提供解決方法。直接看Code。

    //將字串以UTF8編碼轉成Ubyte[](實際上是short[]型別)
    public static short[] StringtoUByte(String str) {
        byte[] bytes = {};
        try {
            bytes = str.getBytes("UTF-8");
        }catch(UnsupportedEncodingException ex){

        }
        return BytetoUByte(bytes);
    }

    //將Ubyte[]以UTF8編碼轉成字串(實際上是short[]型別轉成字串)
    public static String UBytetoString(short[] ubytes) {
        byte[] bytes = UBytetoByte(ubytes);
        String str = "";
        try{
            str = new String(bytes,"UTF-8");
        }catch (Exception ex){

        }
        return str;
    }

    //將Ubyte[]轉成byte[](將short[]轉成byte[])
    public static byte[] UBytetoByte(short[] ubytes) {
        byte[] bytes = new byte[ubytes.length];
        for(int i=0;i<bytes.length;i++){
            bytes[i]=signedToBytes(ubytes[i]);
        }
        return bytes;
    }

    //將byte[]轉成Ubyte[](將byte[]轉成short[])
    public static short[] BytetoUByte(byte[] bytes) {
        short[] ubytes = new short[bytes.length];
        for(int i=0;i<bytes.length;i++){
            ubytes[i]=unsignedToBytes(bytes[i]);
        }
        return ubytes;
    }

    //將byte轉成Ubyte(將byte轉成short)
    public static short unsignedToBytes(byte b) {
        return (short)(b & 0xFF);
    }

    //將Ubyte轉成byte(將int轉成byte)
    public static byte signedToBytes(int b) {
        return ((byte)(b & 0xFF));
    }

可能看官們都注意到,byte轉ubyte都是 一樣的寫法。==> b & 0xFF

只是給他加個二進位負號而已,再加一個負號又變回原樣了。So,解釋完畢,上面的代碼自行取用吧。


This entry was posted in Java, Note By Weil Jimmer.

魔鬼終結者5 劇情/觀後感

No Comments
-
更新於 2016-02-27 17:07:40

打從一開始看完就覺得怪怪,有點混亂了。

去查資料,再重新想一次,一切又解釋通了。

====================

首先,先從第一集講起,第一集凱爾拯救莎菈,然後他生出的小孩康納成為反抗軍領導,這是極度正常,也很好理解。他自己小孩從未來把凱爾送回到過去救母親。

So, 正常的時空,正常的邏輯,姑且叫這個正常的世界為「世界A」。

到了第二集時,未來再送出一個T800及殺手T1000回到過去,這就改寫了歷史,所以未來也跟著改變,如果有看過第三集,有一幕是說:康納本來會和凱特在一起,成為夫婦,但是T800出現了,卻改變未來,而凱特的父親卻是Skynet的重要相關研發人員之一。(國防部部長?)

So, 第二集又再次改變歷史,那我們再次稱這個世界為 世界B 吧。

到了第三集,未來又送回了T800、TX,剩下都不解釋了,改寫未來,改寫歷史,叫做一個新的平行世界C吧,

第四集,這個沒有從未來送回過去,所以沒有改變歷史。

現在可以稍微重整一下思路:

首先世界A是原本應該要發生的,但是,出現了一個分岔點,就是未來送回T800,所以世界A在此消失(應該說變為另一個平行世界吧),主世界變為世界B,後續以此類推。

=============

第五集,處於一個世界C的情況,所以,康納沒有成功擊敗天網,也很正常,或說,康納送回凱爾發生意外很正常。

天網製造了一個T5000,在凱爾被正常傳送到過去 之前 感染了康納,並殺了他的部下。

(很奇特吧,這樣怎麼能說 反抗軍打敗了天網。邏輯不通,但是這不是世界A,也不是世界B,而是 一個新的世界C,所以發生這種事情應該也很正常。就是,康納沒有打敗天網。)

當康納被天網感染,並同化成一個新的半人半機的T3000之後,我猜測,可能搭上了時光機,回到過去,去改寫歷史了,讓天網慢一點誕生,所以如果凱爾到了他們所熟知的審判日的那天,其實是正常的世界,根本沒有審判日,因為天網覺醒的日子又被往後延了,叫做新紀元。

在此刻,凱爾回到更早的年代,所以,凱爾到的那個年代,並沒有被改寫歷史,正常來講是處理世界A,但是因為被送回「T800、T1000」,所以未來也要跟著改變,這點很奇特!

那個T800到底是誰送回去的,而且他怎麼知道這段歷史!匪夷所思。

姑且不追究這個問題,T3000到了還滿後面的時間點,所以,改變是改變後面一點的時間點,不過凱爾說服了莎拉,所以到了 T3000 改變的歷史的那個年代。

這樣就全部解釋通了。唯一可能還有疑點的就是:T3000是世界C的產物,他們回到過去,也理當回到世界A的過去,問題是世界A已經被送來的T800、和T1000給改變了,

而不知道到底是誰送回T800的。因為資料都被刪掉了。

==>既然天網做出T5000,可以感染人類,那天網怎麼可以算是被打敗。科技太先進,看這部片,只會讓我思考,T3000到底是什麼東西!太強大了,有人說T1000感覺比康納厲害,我反倒不覺得,我認為最強的還是T3000、T5000是超級BOSS,感染了康納。

整部片,評分我要給滿差的,因為根本幾乎要時空混亂了。特效啥麼的,還好。有點爛了,跟第三集差不多,我覺得第四部還好一點。

7/10分吧。

By Weil Jimmer


This entry was posted in General, Experience By Weil Jimmer.

改變URL又不刷新或訪問網站的方法 JavaScript

No Comments
-
發布於 2015-07-02 23:27:32

window.history.pushState("str", "title", "/new_url");

改變URL又不刷新或訪問網站的方法。


This entry was posted in General By Weil Jimmer.

int 和 Integer 的比較 Java 程式設計

No Comments
-
更新於 2017-05-19 19:47:56

int test_int_1 = 1;
int test_int_2 = 1;
System.out.println(test_int_1==test_int_2);//true
int test_int_3 = new Integer(1);
int test_int_4 = new Integer(1);
System.out.println(test_int_3==test_int_4);//true
int test_int_5 = new Integer("1");
int test_int_6 = new Integer("1");
System.out.println(test_int_5==test_int_6);//true
int test_int_7 = Integer.valueOf(1);
int test_int_8 = Integer.valueOf(1);
System.out.println(test_int_7==test_int_8);//true
int test_int_9 = Integer.valueOf("1");
int test_int_10 = Integer.valueOf("1");
System.out.println(test_int_9==test_int_10);//true
Integer test_integer_1 = 1;
Integer test_integer_2 = 1;
System.out.println(test_integer_1==test_integer_2);//true
System.out.println(test_integer_1.equals(test_integer_2));//true
Integer test_integer_3 = new Integer("1");
Integer test_integer_4 = new Integer("1");
System.out.println(test_integer_3==test_integer_4);//false
System.out.println(test_integer_3.equals(test_integer_4));//true
Integer test_integer_5 = Integer.valueOf("1");
Integer test_integer_6 = Integer.valueOf("1");
System.out.println(test_integer_5==test_integer_6);//true
System.out.println(test_integer_5.equals(test_integer_6));//true

據我實驗觀察,所得 只要是 int==int 的比較,一定是比較值,若為Integer==int,也一定是比較其值。

唯一為False的情況是當有new出現時:

new Integer("1")==new Integer("1");//false

用 valveOf 得出來的 Integer 類別,進行比較(==),也是 valueOf括號內的值(不管類別是String還是int…)(都小於等於127大於等於負128的情況)是否相等。

test_integer_6 = Integer.valueOf("1");
Integer test_integer_7 = Integer.valueOf(1);
System.out.println(test_integer_6==test_integer_7);//true
System.out.println(test_integer_6.equals(test_integer_7));//true

System.out.println(test_integer_1==test_integer_3);//false
System.out.println(test_integer_1.equals(test_integer_3));//true
System.out.println(test_integer_5==test_integer_3);//false
System.out.println(test_integer_5.equals(test_integer_3));//true
System.out.println(test_integer_7==test_integer_3);//false
System.out.println(test_integer_7.equals(test_integer_3));//true

若 Integer 比較 Integer ,其中之一關鍵字有 new ,== 比較子出來的結果可能就為 False 。

以下為特殊例子!數值小於等於127大於等於負128時不會new,但若不在此區間時,就會以new宣告。

以new宣告的時候==通常都是false,

進行 比較 int 時若其值相同會轉發True。

Integer test_special_1 = Integer.valueOf(127);//等於Integer test_special_1 = 127;
Integer test_special_2 = Integer.valueOf(127);
System.out.println(test_special_1==test_special_2);//true
System.out.println(test_special_1.equals(test_special_2));//true
Integer test_special_3 = Integer.valueOf(128);//等於Integer test_special_1 = 128;
Integer test_special_4 = Integer.valueOf(128);
System.out.println(test_special_3==test_special_4);//false
System.out.println(test_special_3.equals(test_special_4));//true

若本人有誤,歡迎更正。


This entry was posted in Experience, Functions, Java By Weil Jimmer.

Android Java 複製純文字至剪貼簿

No Comments
-
發布於 2015-06-27 15:14:39

ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);

This entry was posted in Java By Weil Jimmer.

最前頁 上一頁  8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 /28 頁)下一頁 最終頁

Visitor Count

pop
nonenonenone

Note

台灣假新聞橫行,沒一家霉體能信的,網軍側翼到處洗風向,堪憂。

毋忘初心,
絕不利慾薰心。

支持網路中立性.
Support Net Neutrality.

飽暖思淫欲,
饑寒起盜心。

支持臺灣實施無條件基本收入

今天是國際盲人節。

Words Quiz


Search

Music

Blogging Journey

4428days

since our first blog post.

The strong do what they can and the weak suffer what they must.

Privacy is your right and ability to be yourself and express yourself without the fear that someone is looking over your shoulder and that you might be punished for being yourself, whatever that may be.

It is quality rather than quantity that matters.

I WANT Internet Freedom.

Reality made most of people lost their childishness.

Justice,Freedom,Knowledge.

Without music life would be a mistake.

Support/Donate

This site also need a little money to maintain operations, not entirely without any cost in the Internet. Your donations will be the best support and power of the site.
MethodBitcoin Address
bitcoin1gtuwCjjVVrNUHPGvW6nsuWGxSwygUv4x
buymeacoffee
Register in linode via invitation link and stay active for three months.Linode

Support The Zeitgeist Movement

The Zeitgeist Movement

The Lie We Live

The Lie We Live

The Questions We Never Ask

The Questions We Never Ask

Man

Man

THE EMPLOYMENT

Man

In The Fall

In The Fall

Facebook is EATING the Internet

Facebook

Categories

Android (7)

Announcement (4)

Arduino (2)

Bash (2)

C (3)

C# (5)

C++ (1)

Experience (52)

Flash (2)

Free (13)

Functions (36)

Games (13)

General (60)

Git (2)

HTML (7)

Java (13)

JS (7)

Mood (24)

NAS (2)

Note (32)

Office (1)

OpenWrt (6)

PHP (9)

Privacy (4)

Product (12)

Python (4)

Software (11)

The Internet (25)

Tools (16)

VB.NET (8)

WebHosting (7)

Wi-Fi (5)

XML (4)