将c ++文本编码器重写为python

时间:2016-12-27 11:10:06

标签: python c++ python-2.7

我在c ++中有以下代码:

for(const char *x = r.ptr, *end = r.ptr + r.len; x != end; ++x) { 
    switch(*x) {
        case 0x5c:
        case 0x22:
            pc->output[0] = '\\'; pc->output[1] = *x; pc->output += 2;
            break;
        case 0xa:
            pc->output[0] = '\\'; pc->output[1] = 'n'; pc->output += 2;
            break;
        case 0xd:
            pc->output[0] = '\\'; pc->output[1] = 'r'; pc->output += 2;
            break;
        default:
            if(str_escape_2_hex(*x)) {
                impl::escape_char_hex(pc->output, *x);
            } else {
                *pc->output = *x; pc->output++;
            }
    }
}

我想将它重写为python 2,因为我需要相同的编码器。我试过这个:

def encode_akv_fields(data):
    hexlify = codecs.getencoder('hex')
    for i, el in enumerate(str(data)):
        if hexlify(el)[0] in ('5c', '22'):  # \\ or "
            data[i].encode('hex') = '\\' + hexlify(el)[0]
        elif hexlify(el)[0] == '0a':  # \n
            data[i].encode('hex') = '\\n'
        elif hexlify(el)[0] == '0d':  # \r
            data[i].encode('hex') = '\\r'
        elif '1f' >= hexlify(el)[0] >= '7f':
            tmp3 = (hexlify(el)[0] >> 4) & '0f'.decode('hex')
            data[i].encode('hex') = '\\x'
    return data

但它不起作用 - 我得到了

  

SyntaxError:无法分配给函数调用

数据是一个字符串或字典,其中包含我要记录的值。这些日志需要采用AKV格式(Apache密钥值)。为了实现这一点,我需要一些十六进制值来编码,就像在c ++中一样(c ++中的代码可以工作)。

我应该如何在cthon中创建相同的编码器?

0 个答案:

没有答案