В Python 3, когда вы говорите space = height / 2 - n
, он автоматически переводит результат в число с плавающей точкой, поэтому spaces
будет 4.0 - 1 = 3.0
. Вам нужно будет привести его к int
, чтобы умножить на него строку.
При преобразовании байтовых значений из потока в числовые значения в Java вы должны быть очень осторожны с расширением знака. Есть ловушка с отрицательными числами (значения от (без знака) 128-255).
Попробуйте это (это работает, если hi и lo являются любыми типами Java integer):
short val=(short)(((hi & 0xFF) << 8) | (lo & 0xFF));
Я считаю, что в этих случаях лучше указывать скобки.
Это происходит при попытке объединить байты (очень тонко)
byte b1 = (byte) 0xAD;
byte b2 = (byte) 0xCA;
short s = (short) (b1<<8 | b2);
Выше приведено 0xFFCA, что неверно. Это потому, что b2 отрицателен (тип байта подписан!), Что означает, что когда он будет преобразован в тип int для побитового | операции, он будет дополнен слева 0xF!
Поэтому вы должны помнить, чтобы маскировать дополненные байты так, чтобы они точно были равны нулю:
short s = (short) (b1<<8 | b2 & 0xFF);
Помните, что вам не нужно завязывать узлы со сдвигом бит, если вы не слишком знакомы с подробности. Вы можете использовать ByteBuffer, чтобы выручить вас:
ByteBuffer bb = ByteBuffer.allocate(2);
bb.order(ByteOrder.LITTLE_ENDIAN);
bb.put(firstByte);
bb.put(secondByte);
short shortVal = bb.getShort(0);
И наоборот, вы можете поставить короткие, а затем вытащить байты.
Кстати, побитовые операции автоматически переводят операнды по крайней мере на ширину int. На самом деле нет понятия «не разрешено сдвигать байт более чем на 7 бит» и другие слухи, которые, кажется, распространяются.
Другие ответы в порядке, но я хотел бы сделать акцент на типе:
short high=(-48 & 0x00ff);
short low=80;
int c= ((high & 0xFF) << 8) | (low & 0xFF);
Тип short
может представлять значения от -32768 до 32767. 53328 не может быть красиво сохранен вкратце, используйте вместо него int
, так как это позволяет хранить беззнаковое значение до ~ 10 9
Так что не уменьшайте выражение до короткого, так как оно даст вам значение со знаком.