1

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

这里的问题是这适用于发布版本而不是调试版本(使用 -g 和不同的优化)。不仅在调试模式下添加少量打印隐藏了问题。

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

4

2 回答 2

3

char *在and之间进行强制转换没有任何问题unsigned char *。如果您遇到因优化级别而异的意外行为,那么您的代码中肯定存在错误,但它可能与丢弃演员表中的签名几乎没有关系。

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

于 2010-07-14T08:38:17.907 回答
1

也许您可以首先解释一下,为什么您必须首先使用 an unsigned char?什么不工作是什么意思?

void*char*并且unsigned char*具有不同的语义,您应该根据以下情况使用它们:

  • void*指向非特定数据,除非将其转换为某种真实类型,否则您无法对其执行任何操作
  • char*不幸的是,有两种不同的含义,或者作为文本字符串,或者作为非特定数据,但可以在低(字节)级别进行寻址(修补)
  • signed char并且unsigned char是要对其执行算术运算的小宽度整数
于 2010-07-14T08:57:16.387 回答