直接上代码片段

/**
 * 字节数组转字符串
 * @param source
 *  字符数组
 * @param length
 *  字符数组长度
 * @param target
 *  字符串
 */
void uint8_2_hex(unsigned char *source, unsigned int length, unsigned char *target) {
    unsigned char ddl, ddh;
    for (int i = 0; i < length; i++) {
        ddh = static_cast<unsigned char>(48 + source[i] / 16);
        ddl = static_cast<unsigned char>(48 + source[i] % 16);
        if (ddh > 57) ddh = static_cast<unsigned char>(ddh + (97 - 58));
        if (ddl > 57) ddl = static_cast<unsigned char>(ddl + (97 - 58));
        target[i * 2] = ddh;
        target[i * 2 + 1] = ddl;
    }
}

/**
 * 字符串转字节数组
 * @param source
 *  字符串
 * @param length
 *  字符串长度
 * @param target
 *  字节数组
 * @param n
 *  转换后长度
 */
void hex_2_uint8(const unsigned char *source, size_t length, unsigned char *target, size_t &n) {
    n = 0;
    for (int i = 0; i < length; i += 2) {
        if (source[i] >= 'a' && source[i] <= 'f') {
            target[n] = static_cast<unsigned char>(source[i] - 'a' + 10);
        } else if (source[i] >= 'A' && source[i] <= 'F') {
            target[n] = static_cast<unsigned char>(source[i] - 'A' + 10);
        } else {
            target[n] = static_cast<unsigned char>(source[i] - '0');
        }
        if (source[i + 1] >= 'a' && source[i + 1] <= 'f') {
            target[n] = static_cast<unsigned char>((target[n] << 4) | (source[i + 1] - 'a' + 10));
        } else if (source[i + 1] >= 'A' && source[i + 1] <= 'F') {
            target[n] = static_cast<unsigned char>((target[n] << 4) | (source[i + 1] - 'A' + 10));
        } else {
            target[n] = (target[n] << 4) | (source[i + 1] - '0');
        }
        ++n;
    }
}
打赏
C语言十六进制字符串与字节数组相互转换
Tagged on:     

发表评论