2012-03-27 3 views
-1

С помощью C++ int преобразуется из «подписанного» в «без знака».Обратное преобразование без знака в подпись в Java

Можно ли преобразовать этот «unsigned» int обратно в «подписанный» с помощью Java.

Подписанное значение (-3), преобразованное в беззнаковое (65533), с использованием C++.

Как я могу преобразовать без знака (65533) значение обратно подписан (-3) с использованием Java

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

Правдин

+0

Что вы хотите добиться этого? –

+0

65533 является допустимым значением знака, введенным в Java – ControlAltDel

+0

Мне нужно фактическое значение, которое было подтверждено. И в моем интерфейсе я использую язык JAVA. – praveen

ответ

2

Если я правильно понял вопрос правильно, у вас есть некоторое значение, как

int value = 65533; 

и вы хотите, чтобы рассматриваться как знаковое 16-разрядное целое число, для которых решение действительно, очень просто:

short signed = (short) value; // -3 
+0

Не принимает ли это строку? –

+0

Э-э, да. Это действительно единственный источник неподписанных значений, которые я могу себе представить на Java, поскольку все примитивные типы всегда подписаны. –

+0

Я думаю, что вы неверно истолковали вопрос. У него есть внешняя программа на C++, которая разбивает ему 16-битное значение. Теперь он хочет переинтерпретировать 16-разрядное целое без знака как целое число со знаком (конечно, оба они представлены в Java как 'int'). –

1

Вы можете использовать следующее:

if (a > 32767) a -= 65536; 
+2

'0x7fff' и' 0x10000' выглядят немного менее случайными. –

0

int на C++ обычно 32 бит, однако вы говорите о 65533 как -3, поэтому ваш int имеет 16 бит. Большинство людей рассмотрят 16-битный int как short (int)

int/Integer в Java ВСЕГДА 32 бит.

Если вы хотите преобразовать подписанный короткий int: -3 в unsigned short int, вы получите всего 65533. Это касается бит nop.

В Java вобще

int i = 65533; // or other values from unsigned short int 

if (i >= (1<<15) { 
    i -= 1 << 16; 
} 
0

Вы использовали C++ интерпретировать целое число и представить его как беззнаковое 2 байта целое.

Путь работает обратно только на предположении о том, что представление является 2 байта целое, с помощью ИЛИ-обратно по знаку биты (предостережение, это непроверенные) должно работать:

int number = 65533; 

// check sign bit for 2-byte integer, add in sign bits for 4 byte integer if set 
int signedNumber = (0 == (number & 0x8000)) ? number : (number | 0xFFFF0000); 
Смежные вопросы