1

iOSおよびMac用のデバイスドライバーソフトウェアを開発しています。これで、数値データをバイナリ形式で iPhone アプリから blutoogh 経由でデバイスに転送したいと考えています。20 Jan 2013 10:30 am のようなデータを転送したいとします。200120131030 をバイナリ シーケンスで転送する必要があります。20 の最初のバイナリ、次に 01 のバイナリ、次に 2013 のバイナリなどを意味します... 他のデバイスは iOS で実行されていません。この数値を NSData に変換したのですが、NSData がバイナリデータなのかどうかわかりません。バイナリにして転送する方法はありますか?(ブルートゥース経由でデータ転送できます)

4

1 に答える 1

2

日付を12桁の文字列または12バイトで表すことにしたとします。NSDataは次の方法で取得できます。

NSDate *date = // the date you start with

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"ddMMYYYYHHmm"];
NSString *dateString = [formatter stringFromDate:date];

// dateString can be any string you wish to send.  In this example, it represents a date
NSData *data = [dateString dataUsingEncoding:NSUTF8StringEncoding];

NSDataのバイトセレクターを使用して、バイトデータへのポインターを取得できます。データをコピーしたいとします。

NSUInteger length = [data length];
char *buffer = (char *)malloc(length);
memcpy(buffer, [data bytes], length);

コメントで述べたように、よりコンパクトなシリアル化は長整数です。次のような小さなデータを取得できます。

unsigned long dateInt = [dateString intValue];
NSData *data = [NSData dataWithBytes:&dateInt length:sizeof(dateInt)];

...次に、同じ方法でバイトを取り出します。覚えておくべき重要なことは、これらのバイトの送信者と受信者は、それらをどのように解釈するかについて合意しなければならないということです。

于 2013-01-18T22:42:20.060 に答える