美文网首页
EOS string与checksum256转换

EOS string与checksum256转换

作者: Forever__ | 来源:发表于2019-01-29 16:29 被阅读0次
    uint8_t from_hex(char c) {
        if (c >= '0' && c <= '9') return c - '0';
        if (c >= 'a' && c <= 'f') return c - 'a' + 10;
        if (c >= 'A' && c <= 'F') return c - 'A' + 10;
        eosio_assert(false, "Invalid hex character");
        return 0;
    }
    
    size_t from_hex(const string& hex_str, char* out_data, size_t out_data_len) {
        auto i = hex_str.begin();
        uint8_t* out_pos = (uint8_t*)out_data;
        uint8_t* out_end = out_pos + out_data_len;
        while (i != hex_str.end() && out_end != out_pos) {
            *out_pos = from_hex((char)(*i)) << 4;
            ++i;
            if (i != hex_str.end()) {
                *out_pos |= from_hex((char)(*i));
                ++i;
            }
            ++out_pos;
        }
        return out_pos - (uint8_t*)out_data;
    }
    
    capi_checksum256 hex_to_sha256(const string& hex_str) {
        eosio_assert(hex_str.length() == 64, "invalid sha256");
        capi_checksum256 checksum;
        from_hex(hex_str, (char*)checksum.hash, sizeof(checksum.hash));
        return checksum;
    }
    
    string to_hex(const char* d, uint32_t s) {
        std::string r;
        const char* to_hex = "0123456789abcdef";
        uint8_t* c = (uint8_t*)d;
        for (uint32_t i = 0; i < s; ++i)
            (r += to_hex[(c[i] >> 4)]) += to_hex[(c[i] & 0x0f)];
        return r;
    }
    
    string sha256_to_hex(const capi_checksum256& sha256) {
        return to_hex((char*)sha256.hash, sizeof(sha256.hash));
    }
    

    相关文章

      网友评论

          本文标题:EOS string与checksum256转换

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