Как преобразовать строку (массив байтов как строку) в короткую - PullRequest
0 голосов
/ 02 марта 2019

Здравствуйте, я хочу преобразовать байтовый массив, т. Е. 0x3eb, в короткий, поэтому я рассмотрел 0x3eb как строку и попытался преобразовать в короткий, но его исключение Numberformat ... кто-то, пожалуйста, помогите мне

import java.io.UnsupportedEncodingException;
public class mmmain
{

    public static void main(String[] args) throws UnsupportedEncodingException 
    {
        String ss="0x03eb";
        Short value = Short.parseShort(ss);
        System.out.println("value--->"+value);
    }
}


Exception what im getting is 
Exception in thread "main" java.lang.NumberFormatException: 
For input string: "0x3eb" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:491)
    at java.lang.Short.parseShort(Short.java:117)
    at java.lang.Short.parseShort(Short.java:143)
    at mmmain.main(mmmain.java:14)

дажея пытался преобразовать 0x3eb в байты с помощью

byte [] bytes = ss.getBytes ();

, но я не нашел никакой реализации для разбора байтов на короткие.

Спасибо зазаранее

Ответы [ 4 ]

0 голосов
/ 02 марта 2019

Следуйте этому документу, это может вам помочь Строка в байтовый массив, байтовый массив в Строку в Java

0 голосов
/ 02 марта 2019

Поскольку используемое вами строковое значение является шестнадцатеричным значением, чтобы преобразовать его в короткое, необходимо удалить 0x с использованием подстроки и передать основание, как показано ниже:

Short.parseShort(yourHexString.substring(2), 16)

Здесь 16 - основа.Больше информации в документе здесь .

Обновление

Поскольку ОП попросил дать дополнительные пояснения, добавив приведенную ниже информацию.

Короткий тип данных может иметь значения только от -32,768 до 32,767.Он не может содержать 0x3eb напрямую, но может содержать его эквивалентное десятичное значение.Вот почему, когда вы анализируете его в короткую переменную и печатаете, он показывает 1003, что является десятичным эквивалентом 0x3eb.

0 голосов
/ 02 марта 2019

Вы должны вырезать "0x" с начала:

short.parseShort(yourHexString.Substring(2), 16)
0 голосов
/ 02 марта 2019

См. doc из parseShort:

Разбирает строковый аргумент как десятичное число со знаком со знаком.Все символы в строке должны быть десятичными цифрами, за исключением того, что первый символ может быть знаком минус ASCII '-' ('\ u002D') для обозначения отрицательного значения или знаком плюс ASCII '+' ('\ u002B')для обозначения положительного значения.

Анализируемая строка должна содержать только десятичные и знаковые символы, она не может содержать префикс 0x.

Try:

String ss="3eb";
Short value = Short.parseShort(ss, 16);
...