2016-07-06 152 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

相關問題