c++ - C 代码转换为 C++ sha1 问题

标签 c++

#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>

int main()
{
    unsigned char ibuf[] = "trysha";
    unsigned char obuf[20];

    SHA1(ibuf, strlen(ibuf), obuf);

    int i;
    for (i = 0; i < 20; i++) {
        printf("%02x ", obuf[i]);
    }
    printf("\n");

    return 0;
}

我在这段代码中遇到了一些错误..

sha.cpp: In function ‘int main()’:
sha.cpp:10:27: error: invalid conversion from ‘unsigned char*’ to ‘const char*’ [-fpermissive]
/usr/include/string.h:399:15: error:   initializing argument 1 of ‘size_t strlen(const char*)’ [-fpermissive]

最佳答案

strlen()想要一个 const char * , 或者至少是 char* ,问题是你给它一个 unsigned char* .你应该这样做:

#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>

int main()
{
    char ibuf[] = "trysha";
    unsigned char obuf[20];

    SHA1(ibuf, strlen(ibuf), obuf);

    int i;
    for (i = 0; i < 20; i++) {
        printf("%02x ", obuf[i]);
    }
    printf("\n");

    return 0;
}

如果 SHA1 期望一个 unsigned char*作为第一个论点,您可能必须转换 ibuf : SHA1(static_cast<unsigned char*>(ibuf), strlen(ibuf), obuf);

顺便说一句,你不需要 strlen() ,您可以将其替换为: SHA1(ibuf, sizeof(ibuf), obuf);

关于c++ - C 代码转换为 C++ sha1 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17852385/

相关文章:

C++ 比较指向 NULL 的指针

android - Android 是否抽象了设备架构?

c++ - 如何将 std::function 的零个或多个参数用作 std::map 中的值?

C++空间问题

C++:不同类型模板函数(方法)的自定义返回值

c++ - C++ 中的 Jabber 服务器库

c++ - `std::ios_base::width()` 和 `std::setw()` 有什么意义?

c++ - BOOST_CHECK_CLOSE 失败输出的格式化?

c++ - 线性(超定)代数方程的解

c++ - 缩小 vector