如何打印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
相关产品推荐
相关产品推荐

