Работя върху решение за изпращане на команди къмпринтер за получаване на квитанция за продажба и има някои проблеми с правилния формат на командата. Имам гнездо, отворено за устройството и работещо, защото се отпечатват неправилни команди. Какво изисква SPEC в тази команда, е да изпрати следното:
1B 07 или в десетичната запетая 27 7. Кое в ASCII е ESC_KEY BEL. Единственият пример, който спецификациите показват за .NET:
MSComm1.Output = Chr $ (& H1B) & Chr $ (& H07)
Това, което опитвах:
// Socket е отворен преди използването на CFStreamCreatePairWithSocketToHost.
var cmd = "27 07"
if let dataString = "(cmd)r".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false), let oStream = self.outputStream {
self.outputData.append(dataString)
if oStream.hasSpaceAvailable {
oStream.write(UnsafePointer((self.outputData.first! as NSData).bytes), maxLength: self.outputData.first!length)
}
}
Данните са там, но мисля, че форматът на съобщението е грешен. Всяка помощ ще бъде оценена.
Отговори:
2 за отговор № 1Просто създайте байт (известен още като UInt8
) масив с данните, които искате за да изпратите и да го прехвърлите директно на write()
метод на NSOutputStream
:
let cmd: [UInt8] = [0x1B, 0x07]
oStream.write(cmd, maxLength: cmd.count)
Обърнете внимание, че изпращате байта към изходния поток, не hex данни, Изобщо няма разлика, ако създадете масива с шестнадесетичен целочислени литерали, както по-горе, или като
let cmd: [UInt8] = [27, 7]
данните са същите.