2015-01-14 6 views
0

Я пытаюсь написать на принтер для печати на принтере Brother, даже Brother поставляет SDK, у них нет редакционной комнаты для разработчиков, и поддержка отправляется на обычную поддержку принтера.Отправка шестнадцатеричного байта на принтер

Я должен послать следующие шестнадцатеричные 1b, 69, 7a, 84, 00 как одну из многих линий.

Я попытался сделать следующее, но я получу ошибку на шестнадцатеричном 84, не говоря байт. Я сделал печать в файл из программы Brothers этикетки, чтобы просмотреть его в шестнадцатеричном редакторе и шестнадцатеричный редактор показывает 1B 69 7A 84 00

final ArrayList<Byte> commands = new ArrayList<Byte>(); 
Byte[] printinfoCommand = new Byte[] {0x1b, 0x69, 0x7a, 0x84, 0x00]; 
AddRange(commands, printinfoCommand); 
byte[] commandToSendToPrinter = convertFromListByteArrayTobyteArray(commands); 
myPrinter.writeBytes(commandToSendToPrinter); 

public static void AddRange(ArrayList<Byte> array, Byte[] newData) { 
    for(int index=0; index<newData.length; index++) { 
     array.add(newData[index]); 
    } 
} 
+0

'0x84' не байт, вы пробовали как' (байт) 0x84'? –

+0

Попробуйте изменить байт на байт. байт является примитивным. – yushulx

ответ

1

Давайте предположим, что вам нужно отправить byte[] к интерфейсу принтера. Имея это в виду, есть пара проблем с вашим кодом.

Во-первых, вы используете массив больших B Byte (который является wrapper object), а не массив примитивов byte.

Во-вторых, на Java подписано byte, поэтому максимальный литерал byte вы можете написать (без литья) - 0x7F. Чтобы указать byte из 0x84, вам придется явно его бросить. Поэтому

Ваш массив литерал должен быть:

byte[] printInfoCommand = 
    new byte[] { 0x1b, 0x69, 0x7a, (byte) 0x84, 0x00 }; 

и вы можете передать этот массив:

myPrinter.writeBytes(printInfoCommand); 

Остальные строки кода вы должны выглядеть ненужным.

+0

Мне нужно посмотреть еще раз, но когда я попытался сделать (байт) 0x84, я сделал точку останова, чтобы увидеть, что содержится в printInfoCommand, и в LogCat он отображается как десятичное значение -125 –

+0

'-124'. Как уже упоминалось, байты Java подписаны. '0x84' -' 0b10000100' - вы можете видеть, что бит знака установлен. '0x84', выраженный в виде подписанного байта, напечатанный в десятичном формате, составляет' -124'. –

+0

Это может помочь вам понять: http://stackoverflow.com/a/10490821/1212960 –