将字符串转为16进制字符串并显示出来
弹幕协议一
// - 发送的字节
5d0000005d000000b1020000xxxxxxx00
5d000000 : 发送内容长度 (内容长度 = (5d000000 内容长度 4字节) + (b1020000 版本信息长度 4字节) (xxxxxxx)的长度 + (00 消息尾 1字节) )
5d000000 : 发送的内容长度 (内容长度 = (5d000000 内容长度 4字节) + (b1020000 版本信息长度 4字节) (xxxxxxx)的长度 + (00 消息尾 1字节) )
b1020000 : 版本信息字符 (b1020000 4字节)
xxxxxxx : 发送的内容;
00 : 尾部的固定字符
// - 字符串转data
NSData *data = [self.msgContent dataUsingEncoding:NSUTF8StringEncoding];
NSMutableString *content = [NSMutableString string];
// - 里边的固定字符
char tail = 0x00;
int version = 0x000002b1;
int length = (int)(sizeof(length) + sizeof(version) + data.length + sizeof(tail));
// - 字节序转换
tail = CFSwapInt32(tail);
version = CFSwapInt32(version);
length = CFSwapInt32(length);
// - 将数字拼接到字符串中(以16进制的形式, %08x 的作用是如果数字为 0x08, 就改为 0x00000008)
NSString *header = [NSString stringWithFormat:@"%08x%08x%08x", length, length, version];
// - 将bytes中的每个字符拼接到字符串中(以16进制的形式, %08x 的作用是如果数字为 0x08, 就改为 0x00000008)
// - 这里的用 unsigned char 而不用 char 是有原因的 例如, "我"的编码为 E6 88 91, 使用char 会变为 FFFFFFE6 FFFFFF88 FFFFFF91, 而使用 unsigned char 会变为 E68891 [资料地址](https://www.geek-share.com/detail/2764755658.html)
for (int i = 0; i < data.length; i++) {
unsigned char va = *(char *)(data.bytes + i);
[content appendFormat:@"%02x", va];
}
// - 拼接结果字符串
NSString *result = [NSString stringWithFormat:@"%@%@%02x", header, content, tail];
return result;
弹幕协议二
NSDictionary *contentDic = [self.msgContent toDictionary];
if (!contentDic) return nil;
NSData *data = [NSJSONSerialization dataWithJSONObject:contentDic options:NSJSONWritingPrettyPrinted error:nil];
NSMutableString *content = [NSMutableString string];
int headerLenth = 16;
int contentLen = CFSwapInt32LittleToHost((int)(data.length + headerLenth));
short headerLen = CFSwapInt16LittleToHost(headerLenth);
short version = CFSwapInt16LittleToHost(1);
int operation = CFSwapInt32LittleToHost(self.operationCode);
int seq = CFSwapInt32LittleToHost(0);
NSString *header = [NSString stringWithFormat:@"%08x%04x%04x%08x%08x", contentLen, headerLen, version, operation, seq];
for (int i = 0; i < data.length; i++) {
unsigned char va = *(char *)(data.bytes + i);
[content appendFormat:@"%02x", va];
}
NSString *result = [NSString stringWithFormat:@"%@%@", header, content];
return result;