【问题标题】:Send a NSString with \0发送带有 \0 的 NSString
【发布时间】:2010-08-11 14:18:19
【问题描述】:

我正在尝试将一个以 \0 结尾的字符串发送到一个 tcp 套接字,但似乎 \0 永远不会到达它的目的地。

使用此代码:

NSString* s=@"<b/> \0_";

uint8_t *buf = (uint8_t *)[s UTF8String];

int resCode = [outputStream write:buf maxLength:strlen((char *)buf)];

我似乎只发送@"&lt;b/&gt; "。可能\0 被视为uint8_t 的结尾。

谁能告诉我应该怎么做??

【问题讨论】:

  • 不要使用 NSString 来发送数据。使用 NSData 或字节缓冲区。
  • 你真的应该看看字符串是如何工作的一些信息。尤其是字符串是怎么转义的,那你就知道为什么strlen没有返回有效长度了。

标签: iphone objective-c nsstring special-characters uint


【解决方案1】:

当然它在没有\0的情况下发送它。 strlen 将返回字符串的长度,不包括空终止符。将其更改为类似

[outputStream write:buf maxLength:(strlen((char *)buf) + 1)]

【讨论】:

  • 你可以补充一下,这个问题与NSString类无关,而只是对Cs string functions. Also, it's not necessary to terminate the NSString with the NUL character, that's done by UTF8String`的理解。
  • \0 字符不用于终止 NSString,而是用于终止服务器上的突击队。 @sha:非常感谢,它就像一个魅力 =)
  • @dkk 我理解,但由于UTF8String 返回一个以空字符结尾的C 字符串,因此您不必在NSString 中添加该字符。
【解决方案2】:

为什么要在字符串中发送 ']0] 字符.....

你不能使用任何其他字符...因为'\0'字符总是被视为终止字符!

如果你真的想以这种方式发送它,那么发送一个不同的字符并在你收到它时将它映射到 '\0'!

【讨论】:

  • 我不能,因为接收器已经以这种方式实现了。它正在与其他应用程序一起使用。
  • 在字符串 io 中使用 \0 作为终止字符是非常好的和常见的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
相关资源
最近更新 更多