gpt4 book ai didi

c++ - 将 C 字符串转换为 unsigned char 指针

转载 作者:太空宇宙 更新时间:2023-11-04 14:42:31 27 4
gpt4 key购买 nike

我正在使用大量字节编译低级代码。在某些情况下,使用包含旧 C 字符串的双引号来定义 then 对我来说很方便。

但是当用 gcc 或 g++ 编译时(不知道其他编译器的行为),它一直困扰着我的尖字符串符号。

基本上我写这个的时候

const unsigned char & refok = *"ABCDEFGHI";

编辑:好的,上面的代码并没有真正起作用,因为理论上它只会保留对字符串第一个字符的拷贝的引用。由于优化,它实际上允许使用某些编译器访问所有字符串,但可能随时中断。

或者这个

const unsigned char oktoo[10] =
{'A','B','C','D','E','F','G','H','I',0};

编译器什么也没说。

但它肯定会拒绝这个:

const unsigned char * bad = "ABCDEFGHI";

有消息

error: invalid conversion from 
‘const char*’ to ‘const unsigned char*’
[-fpermissive]

这甚至不是警告,而是错误

我想知道为什么这个问题比使用引用或将单个字符从有符号字符转换为无符号字符时更重要?还是我遗漏了什么?

最佳答案

我认为您错过了很多的东西!

第一行的内容可能与您的想法完全不同。 (涉及临时物的转换和延寿。)

第二行从大括号初始值设定项中的相应字符初始化每个无符号字符。

在第三行中,编译器是正确的:字符串字面量的类型为const char *,您不能将T* 转换为U* 一般情况下。

请注意,标准明确要求charunsigned charsigned char不同 类型。这里的原因是 char 应该是平台的 native 字节类型,而其他两个是显式无符号和有符号整数类型。无符号/有符号类型用于代数运算,而裸类型用于与系统接口(interface)(例如命令行参数和文件 I/O)。

关于c++ - 将 C 字符串转换为 unsigned char 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8122517/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com