/ / Swift Enviar datos hexadecimales a través de TCP Socket - swift, sockets, tcp, hex

Swift envía datos hexadecimales a través de TCP Socket - swift, sockets, tcp, hex

Estoy trabajando en una solución para enviar comandos a unImpresora de recibos en el punto de venta y tener algunos problemas para obtener el formato de comando correcto. Tengo un zócalo abierto para el dispositivo y eso funciona, porque se imprimen los comandos incorrectos. Lo que el SPEC solicita en este comando es enviar lo siguiente:

1B 07 o en decimal 27 7. El cual en ASCII es ESC_KEY BEL. El único ejemplo que muestra la especificación es para .NET:

MSComm1.Output = Chr $ (& H1B) & Chr $ (& H07)

Lo que he estado intentando:

// Socket está abierto previamente usando 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)
}
}

Los datos están llegando, pero creo que el formato del mensaje es incorrecto. Cualquier ayuda sería apreciada.

Respuestas

2 para la respuesta № 1

Solo crea un byte (alias UInt8) matriz con los datos que desea enviar, y pasar eso directamente a la write() método de NSOutputStream:

let cmd: [UInt8] = [0x1B, 0x07]
oStream.write(cmd, maxLength: cmd.count)

Tenga en cuenta que usted envía bytes al flujo de salida, no datos hexadecimales. No hace ninguna diferencia si crea la matriz con hexadecimal literales enteros como arriba, o como

let cmd: [UInt8] = [27, 7]

Los datos son exactamente los mismos.