-
2015-07-09 13:12:42更新於 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,解釋完畢,上面的代碼自行取用吧。
WeilsNetLogo
This entry was posted in Java, Note By Weil Jimmer.
-
2015-07-08 20:19:30更新於 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分吧。
WeilsNetLogo
This entry was posted in General, Experience By Weil Jimmer.
-
發布於 2015-07-02 23:27:322015-07-02 23:27:32
window.history.pushState("str", "title", "/new_url");
改變URL又不刷新或訪問網站的方法。
WeilsNetLogo
This entry was posted in General By Weil Jimmer.
-
2015-06-28 12:45:14更新於 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
若本人有誤,歡迎更正。
WeilsNetLogo
This entry was posted in Experience, Functions, Java By Weil Jimmer.
-
發布於 2015-06-27 15:14:392015-06-27 15:14:39
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
WeilsNetLogo
This entry was posted in Java By Weil Jimmer.