2009-12-20 23 views
1

我使用http://ioannis.mpsounds.net/2007/12/19/sqlite-native-unicode-like-support/的解决方案作为我的POS App for the iPhone,并且效果很好。如何删除sqlite/unicode支持的警告“大整数隐式截断”?

然而,正如说在注释:

例如,sqlite_unicode.c线1861含有大于0xFFFF整型常量,但被声明为无符号短。我想知道我应该如何应对。

我正在修复项目中的所有警告,这是最后一个。代码是这样的:

static unsigned short unicode_unacc_data198[] = { 0x8B8A, 0x8D08, 0x8F38, 0x9072, 0x9199, 0x9276, 0x967C, 0x96E3, 0x9756, 0x97DB, 0x97FF, 0x980B, 0x983B, 0x9B12, 0x9F9C, 0x2284A, 0x22844, 0x233D5, 0x3B9D, 0x4018, 0x4039, 0x25249, 0x25CD0, 0x27ED3, 0x9F43, 0x9F8E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF }; 

我不知道这个十六进制的东西,所以该怎么办?我没有得到一个错误,不知道这是否会导致一个未来...

回答

1

是的,0x2284A确实大于0xFFFF,这是一个16位无符号整数可以包含的最大。(*)

这是一个查找表,用于将字符与变音标记映射到基本无重音的字符。由于某些原因,定义了一些映射,指向符合16位的Unicode字符的“基本多语言平面”之外的字符。

U + 2284A和上面的其他都是高度模糊的扩展汉字。我不确定为什么BMP中的一个字符会将这个字符称为它的基础不起眼版本。也许这是用于生成表格的源数据中的错误,或者这可能只是中文书写系统的另一个奇怪怪癖。无论哪种方式,你都不太可能需要这种映射。因此,只需将此数组中的所有五位十六进制代码更改为0xFFFF(这似乎是代码用于表示“无映射”的代码)。

(*:在理论上short可能超过16位,但在现实中它不会是如果是它看起来像这样的代码将完全翻倒,无论如何,因为它自由地与u16混合short。指针)。