tips unsigned char 和 char

今天碰到一个棘手的问题,调用一个别人的函数的时候总是会出现 segment fault错误。这个应该是下标越界的问题,但是看了半天都看不出问题在哪里。

后来发现是 在强制转换中发生的问题。原来的函数有一个参数x为int 型,有32位。这个参数在函数中被使用做过数组下标。

在我调用的时候只需要使用8位就可以了。于是我定义了
typedef char BYTE.
然后在调的时候我将BYTE参数用(int)强转为int型呢。

在gcc中 char默认为 signed char,所以强转之后的int变成了负数。造成数组下标越界错误。

将上面的BYTE的定义改为
typedef unsigned char BYTE之后就好了。 这样就可以保证为正数.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: