![](/img/trans.png)
[英]Splitting a string containing multi-byte characters into an array of strings
[英]Character strings to binary string - why are some characters multi-byte?
該代碼應該將字符串轉換為二進制字符串,但是如果有一些字符串,它將返回一個字符串,該String
包含16個二進制數字,而不是我期望的8位數字。
public class aaa {
public static void main(String argv[]){
String nux="ª";
String nux2="Ø";
String nux3="(";
byte []bites = nux.getBytes();
byte []bites2 = nux2.getBytes();
byte []bites3 = nux3.getBytes();
System.out.println(AsciiToBinary(nux));
System.out.println(AsciiToBinary(nux2));
System.out.println(AsciiToBinary(nux3));
System.out.println("number of bytes :"+bites.length);
System.out.println("number of bytes :"+bites2.length);
System.out.println("number of bytes :"+bites3.length);
}
public static String AsciiToBinary(String asciiString){
byte[] bytes = asciiString.getBytes();
StringBuilder binary = new StringBuilder();
for (byte b : bytes)
{
int val = b;
for (int i = 0; i < 8; i++)
{
binary.append((val & 128) == 0 ? 0 : 1);
val <<= 1;
}
binary.append(' ');
}
return binary.toString();
}
}
在前兩個字符串中,我不明白為什么它們返回2個字節,因為它們是單字符字符串。
編譯到這里: https : //ideone.com/AbxBZ9
返回:
11000010 10101010
11000011 10011000
00101000
number of bytes :2
number of bytes :2
number of bytes :1
我正在使用此代碼: 在Java中將字符串(如testing123)轉換為二進制
NetBeans IDE 8.1
您可以通過運行以下簡單代碼來理解為什么某些字符是兩個字節
// integer - binary
System.out.println(Byte.MIN_VALUE);
// -128 - 0b11111111111111111111111110000000
System.out.println(Byte.MAX_VALUE);
// 127 - 0b1111111
System.out.println((int) Character.MIN_VALUE);
// 0 - 0b0
System.out.println((int) Character.MAX_VALUE);
// 65535 - 0b1111111111111111
如您所見,我們可以僅顯示7 bits
或1 byte (01111111)
來顯示Byte.MAX_VALUE
1 byte (01111111)
如果將Character.MIN_VALUE
為整數,則將為: 0
我們可以用one bit
或1 byte (00000000)
來顯示它的二進制格式!
但是Character.MAX_VALUE
呢?
二進制格式是1111111111111111
,十進制格式是65535
並且可以顯示為2 bytes (11111111 11111111)
。
因此十進制格式在0 and 65535
之間的字符可以用1 or 2 bytes
。
希望你能理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.