Хранение и отправка массива целых чисел в виде байтов в java [duplicate]

Короткий ответ: вам нужно выполнить обратный вызов следующим образом:

function callback(response) {
    // Here you can do what ever you want with the response object.
    console.log(response);
}

$.ajax({
    url: "...",
    success: callback
});
144
задан Mitch Talmadge 17 July 2015 в 21:51
поделиться

11 ответов

Я не уверен, что понимаю ваш вопрос.

Я просто попробовал это, и для байта -12 (знаковое значение) он возвращал целое число 244 (эквивалентное значению без знакового байта, но вводимое как int ):

  public static int unsignedToBytes(byte b) {
    return b & 0xFF;
  }

  public static void main(String[] args) {
    System.out.println(unsignedToBytes((byte) -12));
  }

Это то, что вы хотите сделать?

Java не позволяет выразить 244 как значение byte, как и C. Чтобы выразить положительные целые числа выше Byte.MAX_VALUE (127) вам нужно использовать другой целочисленный тип, например short, int или long.

83
ответ дан Guillaume 26 August 2018 в 06:54
поделиться

Язык Java не предоставляет ничего подобного ключевому слову unsigned. A byte в соответствии с спецификацией языка представляет собой значение от & min. 128-127. Например, если byte передается в int, Java будет интерпретировать первый бит как знак и использовать расширение знака .

При этом ничего не мешает вам просматривать byte просто как 8 бит и интерпретировать эти биты как значение от 0 до 255. Просто имейте в виду, что вы ничего не можете чтобы заставить вашу интерпретацию чужого метода. Если метод принимает значение byte, тогда этот метод принимает значение между & минус 128 и 127, если явно не указано иное.

Вот несколько полезных преобразований / манипуляций для вашего удобства:

Конверсии в / из int

// From int to unsigned byte
int i = 200;                    // some value between 0 and 255
byte b = (byte) i;              // 8 bits representing that value

// From unsigned byte to int
byte b = 123;                   // 8 bits representing a value between 0 and 255
int i = b & 0xFF;               // an int representing the same value

(Или, если вы используете Java 8+, используйте Byte.toUnsignedInt .)

Анализ / форматирование

Лучший способ - использовать приведенные выше преобразования:

// Parse an unsigned byte
byte b = (byte) Integer.parseInt("200");

// Print an unsigned byte
System.out.println("Value of my unsigned byte: " + (b & 0xFF));

Арифметика

Представление с двумя дополнениями «просто работает» для сложения, вычитания и умножения:

// two unsigned bytes
byte b1 = (byte) 200;
byte b2 = (byte) 15;

byte sum  = (byte) (b1 + b2);  // 215
byte diff = (byte) (b1 - b2);  // 185
byte prod = (byte) (b2 * b2);  // 225

Для разделения требуется ручное преобразование операндов:

byte ratio = (byte) ((b1 & 0xFF) / (b2 & 0xFF));
30
ответ дан aioobe 26 August 2018 в 06:54
поделиться

Хотя может показаться раздражающим (исходящим из C), что Java не включила беззнаковый байт в язык, это действительно не имеет большого значения, поскольку простая операция «b & amp; 0xFF» дает неподписанное значение для (подписанного) байта b в (редкие) ситуации, в которых это действительно необходимо. Биты фактически не изменяются - просто интерпретация (что важно только при выполнении некоторых математических операций над значениями).

0
ответ дан Bob 26 August 2018 в 06:54
поделиться

В Java нет байта без знака, но если вы хотите отобразить байт, вы можете сделать

int myInt = 144;

byte myByte = (byte) myInt;

char myChar = (char) (myByte & 0xFF);

System.out.println("myChar :" + Integer.toHexString(myChar));

Выход:

myChar : 90

Для получения дополнительной информации, проверьте, Как отобразить значение hex / byte в Java .

0
ответ дан Community 26 August 2018 в 06:54
поделиться

Сторона примечания, если вы хотите ее распечатать, вы можете просто сказать

byte b = 255;
System.out.println((b < 0 ? 256 + b : b));
4
ответ дан Kyle Kinkade 26 August 2018 в 06:54
поделиться

В Java нет примитивных байтов без знака. Обычная вещь заключается в том, чтобы отнести ее к большему типу:

int anUnsignedByte = (int) aSignedByte & 0xff;
32
ответ дан Lukas Eder 26 August 2018 в 06:54
поделиться

Если у вас есть функция, которая должна быть передана подписанным байтом, что вы ожидаете от нее, если вы передаете беззнаковый байт?

Почему вы не можете использовать какой-либо другой тип данных?

Необязательно вы можете использовать байт в качестве байта без знака с простыми или отсутствующими переводами. Все зависит от того, как оно используется. Вам нужно будет уточнить, что вы хотите сделать с ним.

0
ответ дан Peter Lawrey 26 August 2018 в 06:54
поделиться

Если вы хотите, чтобы в Java отсутствовали беззнаковые байты, просто вычтите 256 из числа, которое вас интересует. Он будет генерировать два дополнения с отрицательным значением, которое является желаемым числом в неподписанных байтах.

Пример:

int speed = 255; //Integer with the desired byte value
byte speed_unsigned = (byte)(speed-256);
//This will be represented in two's complement so its binary value will be 1111 1111
//which is the unsigned byte we desire.

Вам нужно использовать такие грязные хаки при использовании leJOS , чтобы запрограммировать кирпич NXT .

1
ответ дан Peter Mortensen 26 August 2018 в 06:54
поделиться

Да и нет. Я искал эту проблему. Как я понимаю это:

Дело в том, что java подписал interger -128 на 127 .. В java можно представить unsigned в java:

public static int toUnsignedInt(byte x) {
    return ((int) x) & 0xff;
}

Если вы для например, добавить номер -12, который должен быть без знака, вы получите 244. Но вы можете снова использовать это число в подписанном, его нужно переместить обратно в подписанное, и он снова будет12.

Если вы попытаетесь добавить 244 в java-байт, вы получите outOfIndexException.

Приветствия.

-2
ответ дан Sindri Þór 26 August 2018 в 06:54
поделиться

Если вы думаете, что ищете что-то вроде этого.

public static char toUnsigned(byte b) {
    return (char) (b >= 0 ? b : 256 + b);
}
0
ответ дан Tobias Johansson 26 August 2018 в 06:54
поделиться

Я думаю, что другие ответы охватывают представление памяти и то, как вы справляетесь с этим, зависит от контекста того, как вы планируете его использовать. Я добавлю, что Java 8 добавила некоторую поддержку для работы с неподписанными типами . В этом случае вы можете использовать Byte.toUnsignedInt

int unsignedInt = Byte.toUnsignedInt(myByte);
164
ответ дан Vlastimil Ovčáčík 26 August 2018 в 06:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: