将C字符串转换为无符号char指针
Casting C string to unsigned char pointer
我正在编译使用许多字节的低级代码。在某些情况下,使用双引号括起旧的C字符串对我来说是很方便的。
但是当用gcc或g++编译时(不知道其他编译器的行为),它一直困扰着我指向字符串的符号。
基本上当我写这个
const unsigned char & refok = *"ABCDEFGHI";
EDIT:好的,上面的代码并没有真正工作,因为理论上它只会保留对字符串第一个字符副本的引用。由于优化,它实际上允许某些编译器访问所有字符串,但可能随时中断。
或
const unsigned char oktoo[10] =
{'A','B','C','D','E','F','G','H','I',0};
编译器什么也没说
但是它肯定会拒绝这个
const unsigned char * bad = "ABCDEFGHI";
with message
error: invalid conversion from
‘const char*’ to ‘const unsigned char*’
[-fpermissive]
这甚至不是一个警告,这是一个错误。
我想知道为什么这个应该比使用引用更有问题,或者将单个字符从有符号字符转换为无符号字符?还是我错过了什么?
我想你错过了很多的东西!
第一行可能和你想的完全不同。(它涉及到临时文件的转换和寿命的延长。)
第二行用大括号初始化式中对应的char初始化每个unsigned char。
在第三行,编译器是正确的:字符串文字的类型是const char *
,并且通常不能将T*
转换为U*
。
注意,标准明确要求char
、unsigned char
和signed char
是不同的类型。这里的理由是char
应该是平台的本机字节类型,而其他两个是显式的无符号和有符号整型。无符号/有符号类型用于代数操作,而裸类型用于与系统接口(例如命令行参数和文件I/O)。
允许在数值类型之间进行隐式转换;这就是前两家公司正在做的事情。不允许在不同类型的指针之间进行隐式转换(除了将派生类指针转换为基类指针)。
注意,第一个没有给出对数组第一个字符的引用。它创建该字符的临时副本,转换为unsigned char
类型,并将引用绑定到该副本,将临时副本的生命周期延长到引用的生命周期。
第二个函数将初始化器列表中的每个char
转换为unsigned char
数组元素。
第三个尝试将const char *
转换为const unsigned char *
;由于char
和unsigned char
是不同的类型,因此不允许隐式指针转换。
- 将无符号char*转换为std::istream*C++
- 通过无符号 char 别名进行对象访问,加载和存储时会发生什么?
- 将数据从 vector<unsigned char> 传输到无符号 char[]
- 将 C++ 转换为 Python 通过引用返回无符号 char*
- Vizualize无符号char *数组作为位图
- C/C++:将 char[] 转换为 int 失败,无符号 char[] 到 int 有效,为什么
- 将无符号char*缓冲区分配给字符串
- 在编译模板方面,char、有符号char或无符号char参数类型的函数重载
- 如何正确地将std::字符串转换为无符号char[]数组*.我觉得我做错了,有人给我指明了正确的方向
- 将char转换为无符号char
- 如何在python中将包含十六进制值的无符号char*数组写入文件
- 解析指向位操作数 C++ 的无符号 char 指针
- 将无符号 char[] 解析为 std::string
- 无符号char*数据作为c++或c中函数的返回类型
- 从C++字符串转换为无符号char*并返回
- 将无符号整数转换为无符号char*
- 无符号char类型变量I/O失败
- 如何在std::string中插入无符号char*变量
- 将C字符串转换为无符号char指针
- 使用memcpy()函数将字节从无符号char数组放入std::string