Как преобразовать UCS-2 HEX в UTF16 BE java
у меня имеется строка в которой зашифрован текст смс зашифрованный в формате USC2 полученный с GSM модема
Я пытаюсь его перекодировать в UTF16 но ничего не выходит. Подскажите пожалуйста что я делаю не так
import java.nio.charset.StandardCharsets;
public class USC {
public static void main(String[] args) {
String msg = "0412044B0020043F043E043B044C043704430435044204350441044C002004420430044004380444043D044B043C0020043F043B0430043D043E043C0020002204110438002B002200200441002000300033002E00310032002E0032003000320031002E002004230442043E0447043D04380442044C002004430441043B043E04320438044F";
byte[] b = msg.getBytes(StandardCharsets.UTF_16BE);
System.out.println(b);
}
}
Компилятор
[B@4b67cf4d
Process finished with exit code 0
На онлайн декодере через сервис https://dencode.com/
выдает следующее

Ответы (1 шт):
Автор решения: ЮрийСПб
→ Ссылка
На котлине это можно так сделать:
fun String.decodeHex(): ByteArray {
check(length % 2 == 0) { "Must have an even length" }
return chunked(2)
.map { it.toInt(16).toByte() }
.toByteArray()
}
fun main() {
val test = "0412044B0020043F043E043B044C043704430435044204350441044C002004420430044004380444043D044B043C0020043F043B0430043D043E043C0020002204110438002B002200200441002000300033002E00310032002E0032003000320031002E002004230442043E0447043D04380442044C002004430441043B043E04320438044F"
val bytes = test.decodeHex()
val bytesDecoded = String(bytes, Charsets.UTF_16BE)
println("bytesDecoded: $bytesDecoded")
//выведет
//bytesDecoded: Вы пользуетесь тарифным планом "Би+" с 03.12.2021. Уточнить условия
}
Проверить можно тут: https://play.kotlinlang.org/
На Java переводить лень, алгоритм такой:
- Преобразуем строку в список строк, деля изначальную строку на части по 2 символа
- Полученный список строк преобразуем список Byte, применяя
Integer.parseInt(stringToConvert, 2), после чего полученноеIntegerпреобзазуем вByte - Полученный список Byte приобразуем в массив Byte
- Конвертим массив Byte в строку в кодировке
UTF_16BE