【问题标题】:C Convert char* to uint8_t []C 将 char* 转换为 uint8_t []
【发布时间】:2020-07-03 20:34:01
【问题描述】:

我正在开发一个接收加密字符串的程序。为此,我使用tiny-AES-c 库。

我收到的加密字符串是char*。为了将字符串与函数AES_CBC_decrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, uint32_t length) 一起使用,我需要将字符串转换为uint8_t []。

这就是 tiny-AES-c 库喜欢这种格式的方式,如他们的 test.c 所示:

uint8_t in[]  = { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a };

有人告诉我这可以使用strtoul 来实现。我已经对此功能进行了相当多的研究,但似乎找不到与我遇到的问题相关的任何问题/文档/示例。

我的问题是,如何将char* 的内容转换为uint8_t [] 数组,格式类似于上面的sn-p?

【问题讨论】:

  • 在 C 中这是为您完成的,数组衰减为指针,除非您正在做一些非常奇怪的事情。您需要拨打的电话在哪里不起作用? strtoul 不是这里的答案。
  • 只需使用演员表...
  • @tadman 你的意思是in[] 无论如何都会变成一个指针,这意味着我可以做类似uint8_t in[] = "This is my text"; 的事情吗?
  • 一开始就将其声明为指针,忘记[] 的废话。 char* 无论如何只是一个通用的“字符缓冲区”。
  • 是什么让您认为首先需要转换为uint8_t []?在你继续之前,我会纠正这个误解。

标签: c type-conversion


【解决方案1】:

这可能很简单:

char* buf = "test";
size_t length = 5;

AES_CBC_decrypt_buffer(ctx, (uint8_t*) buf,  (uint32_t) length)

uint8_t 和 char 对于二进制数据在很大程度上是相同的,同样size_t 和 uint32_t 兼容小于 2^32 的值。

使用integer types 的C99 代码将使用uint8_t 之类的东西,但较旧的C 代码或没有C99 依赖的代码将使用char。它们的意思基本相同。

【讨论】:

  • 这有帮助,请给我一些时间来弄清楚实现
  • 嗯,unsigned char 是旧的 uint8_t 等价物。
  • @Peter-ReinstateMonica True,技术性更强。
  • 最后,仅当您将(无符号或无符号)字符转换为更大的整数时,符号才重要。
猜你喜欢
  • 1970-01-01
  • 2011-10-23
  • 2019-10-14
  • 2017-08-15
  • 1970-01-01
  • 2021-07-11
  • 2019-01-09
  • 2012-04-29
  • 2013-09-01
相关资源
最近更新 更多