如何解决此问题:从 'const char*' 到"const uint8_t* 的转换无效
How to resolve this: invalid conversion from 'const char*' to 'const uint8_t*
我安装了这个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 = {