1

我正在编写一个 iOS 应用程序,其中我在常量文件中声明了一个字符串常量:

NSString * const kHeader = @"name,age,gender";

并在常量.h

FOUNDATION_EXPORT NSString * const kHeader;

并尝试将此字符串写入 ViewController 类中的 NSOutput 流,如下所示:

[输出流写入:[kHeader UTF8String] maxLength:[kHeader 长度]];

这显示了一个编译器警告:将 “const char *”发送到“const uint8_t *”(又名“const unsigned char *”)类型的参数在指向具有不同符号的整数类型的指针之间进行转换

这是什么意思?我该如何解决这个问题?请帮忙。谷歌搜索并没有产生太多有用的结果。

4

1 回答 1

6

除了有符号/无符号指针警告之外,您的代码实际上可能是错误的。 [kHeader length]返回字符串中的 Unicode 字符数,这可能与 . 返回的 UTF-8 字节数不同[kHeader UTF8String]

例如,@"€"有一个 Unicode 字符,但有 3 个 UTF-8 字节。

所以你应该用

const char *utf8string = [kHeader UTF8String];
[outputStream write:(const uint8_t *)utf8string maxLength:strlen(utf8string)];

或者

NSData *data = [kHeader dataUsingEncoding:NSUTF8StringEncoding];
[outputStream write:[data bytes] maxLength:[data length]];
于 2013-08-06T07:07:57.963 回答