在char *和UBYTE之间键入转换*(unsigned char *)

时间:2010-07-14 08:01:56

标签: c pointers char unsigned

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

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

所以我的问题在这里,UByte指针(本质上是一个无符号字符)和char指针之间有什么区别。将UByte更改为char是在所有模式中解决我的问题,但我没有任何解释相同?有什么想法吗?

2 个答案:

答案 0 :(得分:3)

char *unsigned char *之间的投射没有任何问题。如果您的意外行为因优化级别而异,那么您的代码肯定存在错误,但它可能与丢弃演员表中的签名无关。

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

答案 1 :(得分:0)

也许你可以首先解释一下,为什么你必须首先使用unsigned char? 什么不起作用意味着什么?

void*char*unsigned char*具有不同的语义,您应该根据它使用它们:

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