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

时间:2016-01-16 11:26:26

标签: 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:
}

我收到了这个错误:

  

从'const char *'无效转换为'const uint8_t * {aka const   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:\ Program Files中的文件   (86)\的Arduino \硬件\ Arduino的\ AVR \芯\阿尔杜伊诺/ 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:
     

C:\ Users \ e \ Documents \ Arduino \ libraries \ Sha \ sha1.cpp:8:25:错误:   变量'sha1InitState'必须是const才能被放入   通过'属性((progmem))'

的只读部分      

uint8_t sha1InitState [] PROGMEM = {

                     ^
     

退出状态1编译错误。

     

此报告将提供更多信息“显示详细输出   在编辑期间“在文件>首选项中启用。

1 个答案:

答案 0 :(得分:4)

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);

<强>更新

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

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 = {