繁体   English   中英

在char *和UBYTE *之间进行类型转换(未签名的char *)

[英]Type casting between char* and UBYTE* (unsigned char*)

背景:作为套接字会话的一部分,我收到的数组为char *。 现在我们必须从中匹配Tokens(HTTP标头)。这里的代码是我们创建了一个UBYTE *,并在用UBYTE进行类型转换后从char数组中获取值。 稍后,我们将传递给另一个函数的UBYTE指针传递给将char *类型转换为char *之后接受char *的其他函数。

这里的问题是这在发行版本中有效,而在调试版本中不起作用(使用-g和不同的优化方法)。 在调试模式下添加少量打印件不仅隐藏了问题。

所以我的问题是,UByte指针(本质上是无符号字符)和char指针之间有什么区别? 将UByte更改为char可以在所有模式下解决我的问题,但是我对此没有任何解释吗? 有什么想法吗 ?

char *unsigned char *之间的强制转换没有问题。 如果您遇到意想不到的行为(具体取决于优化级别),那么代码中肯定存在一个错误,但可能与放弃强制转换中的签名无关。

除此之外, UBYTE是一个非常荒谬的typedef,因为存在一个标准的C类型uint8_t ,它与stdint.h定义的相同。

也许您可以首先解释一下,尽管为什么您必须首先使用unsigned char 什么是行不通的呢?

void*char*unsigned char*具有不同的语义,应根据以下条件使用它们:

  • void*指向非特定数据,除非将其转换为某种类型,否则您将无法执行任何操作
  • 不幸的是, char*具有两种不同的含义,要么是文本字符串,要么是非特定数据,但是可以以低(字节)级别进行寻址(修补)。
  • signed charunsigned char是要在其上执行算术的小宽度整数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM