将字符串转为16进制字符串并显示出来

将字符串转为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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值