/ / Swift Изпратете Hex Data Over TCP Socket - swift, sockets, tcp, hex

Swift Изпрати Hex данни през TCP Socket - swift, sockets, tcp, hex

Работя върху решение за изпращане на команди къмпринтер за получаване на квитанция за продажба и има някои проблеми с правилния формат на командата. Имам гнездо, отворено за устройството и работещо, защото се отпечатват неправилни команди. Какво изисква 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]

данните са същите.