这是C/C++中我不擅长的一个领域。
我的问题在于,我有一个字符串最终需要包含一些空字符。把所有东西都视为char数组(或字符串)是行不通的,因为当查找到第一个空值时,事情往往会出错。所以我想,好吧,我会切换到uint8_t,这样所有东西就只是一个数字。我可以根据需要移动它们,然后在准备好之后将其强制转换回char。
我当前的主要问题是:如何将字符串的一部分复制到uint8_t缓冲区中?
实际上,我想做的事情类似于:
显然,当我尝试这样做时会出现错误。在memcpy的第一个参数中可能有一些诡计(我看到一些像(*(uint8_t*))这样的东西在线上,但不知道那是什么意思)。
请问该怎么办呢?
另外,我想知道如何轻松地将其转换回char数组?只需将uint8_t指针静态转换为char指针吗?
非常感谢。
我的问题在于,我有一个字符串最终需要包含一些空字符。把所有东西都视为char数组(或字符串)是行不通的,因为当查找到第一个空值时,事情往往会出错。所以我想,好吧,我会切换到uint8_t,这样所有东西就只是一个数字。我可以根据需要移动它们,然后在准备好之后将其强制转换回char。
我当前的主要问题是:如何将字符串的一部分复制到uint8_t缓冲区中?
实际上,我想做的事情类似于:
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指针静态转换为char指针吗?
非常感谢。
std::string
完全可以包含'\0'
字符,除非你在使用 C 串操作函数或其他只接受没有长度的char*
的 API。但是,那些 API 对于包含嵌入 null 字符的字符串也无法正常工作。 - Nicol Bolas(*(uint8_t*))
这样的东西通常是将数据类型转换为更抽象的类型,然后进行一次合法的强制转换,但在此之前它并不合法,最后再将其转换回去。例如,在转换函数指针时经常使用它,比如(DWORD)(*(void**))(void(*)(int))
(大概是这样,我有一段时间没用过了)。仅供参考 :) - ssubechar
数组与std::string
对象一样完全能够容纳空字符。而且,uint8_t
所做的并没有char
做得不好。请向我们展示您尝试过什么,我们将告诉您哪里出了问题。您能否创建一个10行的程序,演示您遇到的问题?请查看http://sscce.org/。 - Robᵩ