2016-07-06 6 views
1

私は、POSレシートプリンタにコマンドを送信し、コマンドフォーマットを正しく取得するためのいくつかの問題を解決するソリューションを開発中です。 Iveはデバイスにソケットを開いていて、正しく動作していません。不正なコマンドが出力されるからです。このコマンドでSPECが要求するものは、次のものを送信することです。Swift TCPソケット上の16進数データを送信

1B 07または10進数27 7. ESC_KEY BELはASCIIで表示されます。

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

私がしようとしてきた何:

//ソケット仕様は示して唯一の例では、.NET用です以前は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)配列を作成し、NSOutputStreamwrite()方法に直接それを渡す:あなたがバイトを送信

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

注意出力ストリームではなく、16進データです。 それはあなたが上記のように進 整数リテラルで配列を作成、または

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

としてデータがまったく同じであれば、全く違いはないことができます。

+0

upvoteに十分な担当者がいませんが、これは完全に機能しました。ありがとう! – user2417738

関連する問題