我正在为 iOS 和 mac 开发设备驱动程序软件。在此,我想通过 blutoogh 将二进制形式的数字数据从我的 iPhone 应用程序传输到设备。假设我想传输像 2013 年 1 月 20 日上午 10:30 这样的数据,我需要以二进制序列传输 200120131030。表示 20 的第一个二进制文件,然后是 01 的二进制文件,然后是 2013 的二进制文件,依此类推……其他设备未在 iOS 上运行。我将此数字转换为 NSData 但无法理解 NSData 是否为二进制数据。有没有办法让它二进制并传输它。(我可以通过蓝牙传输数据)
问问题
1547 次
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 回答