我正在使用套接字并试图简单地将一个字符串写入套接字。我找到了几个关于如何做到这一点的例子,比如下面的例子(oStream是NSOutputStream
)。这全都在NSStreamEventHasSpaceAvailable
之内。将NSString放入uint8_t缓冲区
uint8_t buffer[11] = "I send this";
int len;
len = [oStream write:buffer maxLength:sizeof(buffer)];
这很好。所以我尝试修改它,使其通过获取NSString的字节来定制。
int len;
NSString* strId;
strId = @"string will be customized with several lines of code here";
uint8_t buffer[[strId lengthOfBytesUsingEncoding:NSASCIIStringEncoding]];
[strId getBytes:buffer maxLength:sizeof(buffer) usedLength:NULL encoding:NSASCIIStringEncoding options:NULL range:NSRangeFromString(strId) remainingRange:NULL];
len = [oStream write:buffer maxLength:sizeof(buffer)];
这根本不起作用。它将完整的乱码写入缓冲区(可能是字节),并且我得到getBytes行的警告:“传递getBytes的第5个参数使得指针中的整数不经过转换。”
对不起,如果这之前已经问过,找不到答案,它看起来像问题应该是非常简单的修复。谢谢!
编辑: 我发现了一些似乎工作,但我不知道它是否正确编程这样的事情。请参阅下面的答案。这种情况下使用的危险代码是?
参数5的事情是关于'options'应该是一个整数(实际上是'NSStringEncodingConversionOptions'枚举的成员,或者这个枚举成员的组合),并且你传递NULL,它扩展成'(void *) 0'。通过零来关闭警告。 (虽然这不会解决您的问题。) – zneak 2010-02-22 23:32:17
谢谢zneak。这摆脱了警告,但正如你所说没有解决实际问题。这是一个进步,虽然:) – mjdth 2010-02-22 23:52:54