unsigned char 大小不为1,_bool如何实现大小为1
时间: 2023-06-20 18:03:45 浏览: 44
在C++中,_Bool类型的大小是实现定义的,因此无法保证其大小为1。如果您需要确保一个类型的大小为1,可以使用stdint.h中的uint8_t类型。例如,您可以使用uint8_t来表示布尔值,如下所示:
```
#include <stdint.h>
typedef uint8_t my_bool;
int main() {
my_bool b = 1;
return 0;
}
```
这样就可以确保my_bool类型的大小为1字节。
相关问题
../Core/Inc/main.h:55:23: error: two or more data types in declaration specifiers typedef unsigned char _Bool;
这 error 的原因是 `_Bool` 是 C99 中的关键字,但在某些编译器中,可能已经定义了 `_Bool` 作为其他类型的别名。因此,您可以尝试使用 `<stdbool.h>` 头文件来定义布尔类型,而不是使用 `_Bool`。
要使用 `<stdbool.h>` 头文件,请在代码中添加以下行:
```
#include <stdbool.h>
```
然后,您可以使用 `bool` 代替 `_Bool`:
```
typedef bool my_bool;
```
或者,您也可以使用 `#define` 来定义布尔类型:
```
#define my_bool unsigned char
```
请注意,这种方法可能会导致一些编译器警告或错误,因为它不是标准的布尔类型定义方式。
bool verifyText(std::string text, RSA_key pub, unsigned char sign[SIGN_LEN]) { size_t signLen = SIGN_LEN; unsigned char hash[SHA256_DIGEST_LENGTH]; if (!SHA256 ((const unsigned char *)text.c_str(), text.size(), hash)) { std::cout << KCYN << "SHA1 failed" << KNRM << std::endl; exit(0); } bool b = RSA_verify(NID_sha256, hash, SHA256_DIGEST_LENGTH, sign, signLen, pub); return b; }
这段代码定义了一个名为`verifyText`的函数,用于验证文本的签名是否有效。函数接受三个参数:一个字符串`text`,一个`RSA_key`结构体`pub`和一个`unsigned char`数组`sign`。
函数内部首先声明了两个变量:`signLen`用于存储签名的长度,`hash`用于存储对文本进行SHA256哈希后的结果。
接下来,函数使用SHA256函数对`text`进行哈希,并将结果存储在`hash`数组中。如果SHA256函数调用失败,将打印错误信息并退出程序。
然后,函数调用`RSA_verify`函数来验证签名。该函数返回一个布尔值,表示验证结果。如果验证成功,则返回`true`,否则返回`false`。
最后,函数返回验证结果。