首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >char数组到uint8_t数组

char数组到uint8_t数组
EN

Stack Overflow用户
提问于 2012-06-01 03:35:56
回答 2查看 11.9K关注 0票数 4

这是我一直不擅长的C/C++的一个领域。

我的问题是我有一个字符串,它最终需要包含一些空字符。把所有东西都当作字符数组(或字符串)是行不通的,因为当它们找到第一个null时,事情往往会变得一团糟。所以我想,好吧,我会切换到uint8_t,所以一切都只是一个数字。我可以根据需要移动东西,并在准备好时将其重新转换为char。

我现在的主要问题是:如何将字符串的一部分复制到uint8_t缓冲区?

实际上,我想要做的事情如下:

代码语言:javascript
复制
std::string s = "abcdefghi";
uint8_t *val = (uint8_t*)malloc(s.length() + 1);
memset(val, 0, s.length() + 1);

// Assume offset is just some number
memcpy(val + offset, s.substr(1, 5).c_str(), 5);

显然,当我尝试这样做时,我得到了一个错误。在memcpy的第一个参数(我在网上看到像(*(uint8_t*))这样的东西,但不知道这是什么意思)中可能有一些技巧可以完成。

有什么建议吗?

既然我在这里,我该如何轻松地将其转换回char数组呢?只需将uint8_t指针static_cast到字符指针?

非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-01 04:18:10

我想,好吧,我会切换到uint8_t,所以所有的东西都只是一个数字。

这不会使寻找'\0‘的算法突然停止,使用char的算法也不需要注意'\0’。用空字符表示结束是C字符串的惯例,而不是char数组。无论如何,uint8_t可能只是char的一个类型定义。

正如Nicol Bolas指出的那样,std::string已经能够存储包含空字符的字符串,而无需特殊处理空字符。

至于你的问题,我不确定你指的是什么错误,因为下面的工作很好:

代码语言:javascript
复制
#include <iostream>
#include <string>
#include <cstdint>
#include <cstring>

int main() {
    std::string s = "abcdefghi";
    std::uint8_t *val = (std::uint8_t*)std::malloc(s.length() + 1);
    std::memset(val, 0, s.length() + 1);

    int offset = 2;
    std::memcpy(val + offset, s.substr(1, 5).c_str(), 5);
    std::cout << (val+offset) << '\n';
}

memcpy行从字符串s中提取第二到第六个字符,并将它们复制到val中。然后,带有cout的行将打印"bcdef“。

当然,这是C++,所以如果您想手动分配一些内存并将其清零,您可以这样做:

代码语言:javascript
复制
std::unique_ptr<uint8_t[]> val(new uint8_t[s.length()+1]());

或者使用向量:

代码语言:javascript
复制
std::vector<uint8_t> val(s.length()+1,0);

要从uint8_t数组进行转换,您可以(但通常不应该)执行以下操作:

代码语言:javascript
复制
char *c = reinterpret_cast<uint8_t*>(val);
票数 1
EN

Stack Overflow用户

发布于 2012-06-01 03:59:31

好吧,代码运行正常,它复制val中的子字符串。但是,在偏移之前的所有位置上都将为0。

例如,offset=2 val将为{0,0,b,c,d,e,f,0,0,0}

如果您打印这个,它将不会显示任何内容,因为字符串在第一个位置是null终止的(我猜这就是您所说的错误...)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10840147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档