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

use*_*774 3 c++ arduino sha hmac arduino-ide

我安装了此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:
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

从'const char *'到'const uint8_t * {aka const unsigned char *}'的无效转换'[-fpermissive]

我不知道为什么会这样。该示例是从库站点获取的原始数据。你能帮我吗?

编辑: 我试图从更改行:

Sha256.initHmac((const uint8_t*)"hash key",8);
Run Code Online (Sandbox Code Playgroud)

至:

Sha256.initHmac((const uint8_t*)"hash key",8);
Run Code Online (Sandbox Code Playgroud)

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

Arduino:1.6.7(Windows 10),开发板:“ Arduino / Genuino Uno”

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

             from C:\Users\e\Documents\Arduino\libraries\Sha\sha1_config.h:13,

             from C:\Users\e\Documents\Arduino\libraries\Sha\sha1.h:4,

             from C:\Users\e\Documents\Arduino\libraries\Sha\sha1.cpp:1:
Run Code Online (Sandbox Code Playgroud)

C:\ Users \ e \ Documents \ Arduino \ libraries \ Sha \ sha1.cpp:8:25:错误:变量'sha1InitState'必须为const才能通过' attribute((progmem ))'

uint8_t sha1InitState [] PROGMEM = {

                     ^
Run Code Online (Sandbox Code Playgroud)

退出状态1编译错误。

该报告将具有在文件>首选项中启用的“在编译过程中显示详细输出”的更多信息。

jyv*_*vet 5

initHmac函数签名是:

void initHmac(const uint8_t* secret, int secretLength);
Run Code Online (Sandbox Code Playgroud)

但是,您可以const char*保密。

尝试将secret变量强制转换为const uint8_t*(或const unsigned char*):

Sha256.initHmac((const uint8_t*)"hash key",8);
Run Code Online (Sandbox Code Playgroud)

更新

要解决新的编译错误,只需在库源代码中const包含的所有声明之前添加PROGMEM。保险起见:

Sha / sha1.cpp中(第11行)

const uint8_t sha1InitState[] PROGMEM = {
Run Code Online (Sandbox Code Playgroud)

Sha / sha256.cpp中(第6行)

const uint32_t sha256K[] PROGMEM = {
Run Code Online (Sandbox Code Playgroud)

Sha / sha256.cpp(第11行)中

const uint8_t sha256InitState[] PROGMEM = {
Run Code Online (Sandbox Code Playgroud)

  • 查看更新(这是另一个与您的初始错误无关的问题) (2认同)