Короткий ответ: вам нужно выполнить обратный вызов следующим образом:
function callback(response) {
// Here you can do what ever you want with the response object.
console.log(response);
}
$.ajax({
url: "...",
success: callback
});
Я не уверен, что понимаю ваш вопрос.
Я просто попробовал это, и для байта -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
.
Язык Java не предоставляет ничего подобного ключевому слову unsigned
. A byte
в соответствии с спецификацией языка представляет собой значение от & min. 128-127. Например, если byte
передается в int
, Java будет интерпретировать первый бит как знак и использовать расширение знака .
При этом ничего не мешает вам просматривать byte
просто как 8 бит и интерпретировать эти биты как значение от 0 до 255. Просто имейте в виду, что вы ничего не можете чтобы заставить вашу интерпретацию чужого метода. Если метод принимает значение byte
, тогда этот метод принимает значение между & минус 128 и 127, если явно не указано иное.
Вот несколько полезных преобразований / манипуляций для вашего удобства:
// 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));
Хотя может показаться раздражающим (исходящим из C), что Java не включила беззнаковый байт в язык, это действительно не имеет большого значения, поскольку простая операция «b & amp; 0xFF» дает неподписанное значение для (подписанного) байта b в (редкие) ситуации, в которых это действительно необходимо. Биты фактически не изменяются - просто интерпретация (что важно только при выполнении некоторых математических операций над значениями).
В 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 .
Сторона примечания, если вы хотите ее распечатать, вы можете просто сказать
byte b = 255;
System.out.println((b < 0 ? 256 + b : b));
В Java нет примитивных байтов без знака. Обычная вещь заключается в том, чтобы отнести ее к большему типу:
int anUnsignedByte = (int) aSignedByte & 0xff;
Если у вас есть функция, которая должна быть передана подписанным байтом, что вы ожидаете от нее, если вы передаете беззнаковый байт?
Почему вы не можете использовать какой-либо другой тип данных?
Необязательно вы можете использовать байт в качестве байта без знака с простыми или отсутствующими переводами. Все зависит от того, как оно используется. Вам нужно будет уточнить, что вы хотите сделать с ним.
Если вы хотите, чтобы в 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 .
Да и нет. Я искал эту проблему. Как я понимаю это:
Дело в том, что java подписал interger -128 на 127 .. В java можно представить unsigned в java:
public static int toUnsignedInt(byte x) {
return ((int) x) & 0xff;
}
Если вы для например, добавить номер -12, который должен быть без знака, вы получите 244. Но вы можете снова использовать это число в подписанном, его нужно переместить обратно в подписанное, и он снова будет12.
Если вы попытаетесь добавить 244 в java-байт, вы получите outOfIndexException.
Приветствия.
Если вы думаете, что ищете что-то вроде этого.
public static char toUnsigned(byte b) {
return (char) (b >= 0 ? b : 256 + b);
}
Я думаю, что другие ответы охватывают представление памяти и то, как вы справляетесь с этим, зависит от контекста того, как вы планируете его использовать. Я добавлю, что Java 8 добавила некоторую поддержку для работы с неподписанными типами . В этом случае вы можете использовать Byte.toUnsignedInt
int unsignedInt = Byte.toUnsignedInt(myByte);