我想將String反序列化爲int []數組並返回。我嘗試這樣的事情如何將字符串轉換爲整數數組並返回到JAVA
public static int[] getIntArrayFromString(String string, int stringMaxLenght) {
byte[] bytes = string.getBytes();
int rest = bytes.length % 4;
int times = (bytes.length - rest)/4;
int[] result = new int[stringMaxLenght];
int maxIndex = 0;
for (int i = 0; i < times; i++) {
if (times > stringMaxLenght)
break;
int in = createIntFromBytes(bytes[i * 4 + 0], bytes[i * 4 + 1], bytes[i * 4 + 2],
bytes[i * 4 + 3]);
result[i] = in;
maxIndex = i;
}
byte[] restb = new byte[4];
for (int i = 0; i < rest; i++) {
restb[i] = bytes[(maxIndex + 1 * 4) + i];
}
if (times < stringMaxLenght) {
int lastInt = createIntFromBytes(restb);
result[maxIndex + 1] = lastInt;
}
return result;
}
public static int createIntFromBytes(byte byte0, byte byte1, byte byte2, byte byte3) {
byte[] byteArray = new byte[4];
byteArray[0] = byte0;
byteArray[1] = byte1;
byteArray[2] = byte2;
byteArray[3] = byte3;
return createIntFromBytes(byteArray);
}
public static String getStringFromIntegerArray(int[] intArray) {
ByteBuffer buffer = ByteBuffer.allocate(intArray.length * 4);
for (int integer : intArray) {
byte[] bs = createBytesFromInt(integer);
buffer.put(bs);
}
return getStringFromBytes(buffer.array());
}
public static int createIntFromBytes(byte[] bytes) {
return ByteBuffer.wrap(bytes).order(ByteOrder.BIG_ENDIAN).getInt();
}
public static String getStringFromBytes(byte[] bytes) {
String string = new String(bytes);
return string.trim();// otherwise it creates string with empty chars
}
但似乎不工作,例如字符串「簽名」。你有什麼想法,我做錯了什麼,或者應該如何做得更好。
沒有提及代碼,你會期望*字符串「Signature」以整數數組的形式返回嗎?還要注意,調用'String.getBytes'而不指定編碼通常是一個壞主意,因爲它將使用平臺默認編碼。 –
你能解釋一下你爲什麼要這樣做嗎?因爲有幾種方法,可能只有一種方法適合你的問題。 – TwoThe
你應該首先獲取字符串的字符,然後獲取與該字符對應的Integer。 Integer的值取決於您指定的編碼方案或平臺默認編碼。 –