2016-07-06 125 views
1

我正在制定一个解决方案,将命令发送到销售点收据打印机,并且有一些问题正确地获取命令格式。我有一个插座打开设备,并且工作,因为不正确的命令被打印。 SPEC要求的命令是发送以下内容:Swift通过TCP套接字发送十六进制数据

1B 07或十进制27 7. ASCII中的哪一个是ESC_KEY BEL。该规范给出了唯一的例子是.NET:

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

我一直想:

//套接字先前使用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) 
     } 
    } 

数据到达那里,但我认为该消息的格式是错误的。任何帮助,将不胜感激。

+0

发送给打印机的是字节序列0x50,0x55,0x32,0x48,0x55,0x13。您的打印机正在等待字节序列0x1b,0x07 – user3441734

回答

2

只要创建一个字节(又名UInt8)阵列与您要 发送的数据,并直接传递到write()方法NSOutputStream

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

请注意,您发送字节到输出流,而不是十六进制数据。 它使不差在所有如果创建十六进制 整数常量阵列如上,或作为

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

的数据是完全一样的。

+0

没有足够的代表upvote,但这工作得很好。谢谢! – user2417738

相关问题