如何解决此问题:从 'const char*' 到"const uint8_t* 的转换无效

How to resolve this: invalid conversion from 'const char*' to 'const uint8_t*

本文关键字:const uint8 无效 转换 何解决 char 问题 解决      更新时间:2023-10-16

我安装了这个SHA库:https://github.com/Cathedrow/Cryptosuite。我想使用Win上安装的Arduino IDE 1.6.7实现HMAC256。控制器10和ATMEGA328。

我复制了他们网页中给出的例子。我还是新手,想测试和尝试。我在Arduino IDE中编写了这段代码。

#include "sha256.h"
void setup() {
    // put your setup code here, to run once:
    uint8_t *hash;
    //static const char hash[450]={};
    //const char *hash; hash={};
    Sha256.initHmac("hash key",8); // key, and length of key in bytes
    Sha256.print("This is a message to hash");
    hash = Sha256.resultHmac();
    //Serial.print(hash,HEX);
}
void loop() {
    // put your main code here, to run repeatedly:
}

我收到此错误:

从"常量

字符*"到"常量uint8_t* {又名常量"的转换无效 unsigned char*}' [-fpermissive]

我不知道为什么会这样。该示例是原文,取自库站点。你能帮忙吗?

编辑:我试图将行从:

Sha256.initHmac((const uint8_t*)"hash key",8);

自:

Sha256.initHmac((const uint8_t*)"hash key",8);

但同样,编译失败。它说:

Arduino: 1.6.7 (Windows 10), 板: "Arduino/Genuino Uno"

在 C:\程序文件中包含的文件中 (x86)\Arduino\hardware\arduino\avr\cores\arduino/arduino.h:28:0,

             from C:UserseDocumentsArduinolibrariesShasha1_config.h:13,
             from C:UserseDocumentsArduinolibrariesShasha1.h:4,
             from C:UserseDocumentsArduinolibrariesShasha1.cpp:1:

C:\Users\e\Documents\Arduino\libraries\Sha\sha1.cpp:8:25: 错误: 变量 'sha1InitState' 必须是常量才能放入 通过"属性((progmem))"的只读部分

uint8_t sha1InitState[] PROGMEM = {

                     ^

退出状态 1 编译时出错。

此报表将包含有关"显示详细输出"的详细信息 在编译期间"在"文件>首选项"中启用。

initHmac函数签名为:

void initHmac(const uint8_t* secret, int secretLength);

但是你用const char*来做秘密。

溶液

尝试将秘密变量转换为const uint8_t*(或const unsigned char*):

Sha256.initHmac((const uint8_t*)"hash key",8);

更新

要解决新的编译错误,只需在库源中包含PROGMEM的所有声明前面添加const。对于坚持:

Sha/sha1 中.cpp(第 11 行)

const uint8_t sha1InitState[] PROGMEM = {

Sha/sha256 中.cpp(第 6 行)

const uint32_t sha256K[] PROGMEM = {

Sha/sha256 中.cpp(第 11 行):

const uint8_t sha256InitState[] PROGMEM = {