美文网首页程序员
数据流的16进制高效编码

数据流的16进制高效编码

作者: beiqi_2017 | 来源:发表于2017-09-16 00:26 被阅读0次
16进制编码,转成字符串
+ (NSString *)hexStringForData:(NSData *)data {
    static const u_char HexCharMap[] = "0123456789abcdef";
    Byte* bytes = (Byte*) [self bytes];
    Byte* bytesHex = (Byte*) malloc([self length]*2);
    for (NSUInteger i = 0, j = 0; i < [self length]; i++, j+=2) {
        bytesHex[j+1] = HexCharMap[ bytes[i] & 0x0f ];
        bytesHex[j  ] = HexCharMap[(bytes[i] & 0xf0) >> 4];
    }
    return [[NSString alloc] initWithBytesNoCopy:bytesHex length:[self length]*2 encoding:(NSASCIIStringEncoding) freeWhenDone:YES];
}
16进制编码逆过程
+ (NSData *)dataFromHexString:(NSString *)hexString {
    NSUInteger size = [hexString length] / 2;
    Byte* result = (Byte*) malloc(size);
    bzero(result, size);
    const char * cstring = [hexString cStringUsingEncoding:NSUTF8StringEncoding];
    for (int i = 0, j = 0; i < size; i++, j += 2) {
        result[i] = (Byte) ((digittoint(cstring[j]) << 4)  | digittoint(cstring[j+1]));
    }
    
    return [NSData dataWithBytesNoCopy: result length:size freeWhenDone:YES];
}

总结

无意中搜到了C函数 digittoint,已经可以把16进制字符转成数值,所以欣喜之余,发现可以抛弃网上的NSScaner方案(不断构造新scanner来解析)。如果刚好你看到,觉得有用,那就留个赞。:)

相关文章

  • 数据流的16进制高效编码

    16进制编码,转成字符串 16进制编码逆过程 总结 无意中搜到了C函数 digittoint,已经可以把16进制字...

  • swift 打印emoji表情

    code为16进制编码

  • C# 数据操作工具类

    将Unicode编码转换为汉字字符串 2进制string 转byte[] 16进制转2进制 字节数组转16进制字符...

  • wxmedit

    一个带编码转换的16进制编辑器

  • React学习经验

    REACT特点声明式编码 组件化编码 高效 支持服务端渲染 单向数据流 JSX解析遇到<>开头的代码,同名的h...

  • python加密

    字符串与bytes binascii binascii模块以更合适的方式展示16进制的字节 URL编码 URL编码...

  • 学习记录2

    url编码 winsock编程 url编码 就是以百分号开头的16进制两位ascii码中文通常为对应的utf编码一...

  • 编码/加密例子

    ASCII转Unicode 中文转Unicode (16进制?) 中文转UTF-8 URL编码window.enc...

  • 本地获取json文件方法

    1.URL编码: 利用一个百分号和16进制数字来对字符进行编码,JS提供了encodeURIComponent()...

  • 0~255的值,10进制与16进制对照表

    10进制16进制====10进制16进制====10进制16进制====201410569205CD2519110...

网友评论

    本文标题:数据流的16进制高效编码

    本文链接:https://www.haomeiwen.com/subject/zitysxtx.html