You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何打印void*指向的内容?SHA256函数调试需求

解决方案

一、打印void* data指向的实际内容

data是void*类型,需先转换为具体字节类型指针(比如uint8_t*,匹配SHA256的字节流处理逻辑),再根据传入的len参数遍历字节,以十六进制或ASCII格式输出。

示例代码:

// 打印data指向的字节内容(十六进制+ASCII双格式)
void print_data(const void *data, size_t len) {
    const uint8_t *bytes = (const uint8_t *)data;
    
    printf("Data (hex): ");
    for (size_t i = 0; i < len; i++) {
        printf("%02x ", bytes[i]);
    }
    printf("\n");

    printf("Data (ASCII): ");
    for (size_t i = 0; i < len; i++) {
        printf("%c", isprint(bytes[i]) ? bytes[i] : '.');
    }
    printf("\n");
}

你可以在sha256函数开头调用这个辅助函数,直接查看传入的内容:

static inline uint256_t sha256(const void *data, size_t len)
{
    // 添加打印逻辑
    print_data(data, len);

    secp256k1_sha256_t cxt;
    secp256k1_sha256_initialize(&cxt);
    secp256k1_sha256_write(&cxt, (uint8_t *)data, (int)len);
    uint256_t res;
    secp256k1_sha256_finalize(&cxt, (uint8_t *)&res);
    return res;
}

二、打印uint256_t类型的返回结果

uint256_t是32字节的无符号整数类型,转换为uint8_t*后即可遍历字节。注意secp256k1_sha256_finalize输出的哈希结果是大端字节序(符合SHA256标准),而内存中通常是小端存储,若要输出标准SHA256字符串格式,需要调整字节顺序。

示例代码:

// 打印标准大端格式的SHA256结果
void print_sha256_result(const uint256_t *res) {
    const uint8_t *bytes = (const uint8_t *)res;
    printf("SHA256 Result: ");
    // 从最后一个字节开始打印,转换为大端顺序
    for (int i = 31; i >= 0; i--) {
        printf("%02x", bytes[i]);
    }
    printf("\n");

    // 若需直接打印内存存储的小端顺序,用下面的循环
    // for (size_t i = 0; i < 32; i++) {
    //     printf("%02x", bytes[i]);
    // }
    // printf("\n");
}

调用示例:

uint256_t hash = sha256(your_input_data, input_len);
print_sha256_result(&hash);

内容的提问来源于stack exchange,提问作者Alexio puk2sefu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 03:40:16