2012-04-08 57 views
0

我想连接与常规字符空字符,像这样:追加空字符以常规字符

NSString *message = @"ABC"; 
NSUInteger length = [message length]; 
char char4 = length; 
char char3 = length >> 8; 
char char2 = length >> 16; 
char char1 = length >> 24; 
message = [NSString stringWithFormat:@"%c%c%c%c%@",char4,char3,char2,char1,message]; 

的问题是,串停留在长度为4(看起来像¿ABC)。如何编辑此代码以便空字符也附加到字符串?

在答复标志的评论

我想在这里做的是字符串的长度追加到字符串,而不是以数字格式的开始,但在ASCII字符格式(几乎像一个基地256号码)。我将使用格式@"%04c%@",length,message,问题是生成的字符串将是000¿ABC,并且零有ascii值(精确到十进制48),这样就会失败。具有十进制值0的ASCII字符是空字符(\0),所以我必须使用该字符而不是0.必须使用那些前导空字符。

为了什么,我试图完成的目的,下面的代码工作

NSUInteger length = [message length]; 
char char4 = length; 
char char3 = length >> 8; 
char char2 = length >> 16; 
char char1 = length >> 24; 

if (char4 == '\0') 
    message = [NSString stringWithFormat:@"\0%@",message]; 
else 
    message = [NSString stringWithFormat:@"%c%@",char4,message]; 

if (char3 == '\0') 
    message = [NSString stringWithFormat:@"\0%@",message]; 
else 
    message = [NSString stringWithFormat:@"%c%@",char3,message]; 

if (char2 == '\0') 
    message = [NSString stringWithFormat:@"\0%@",message]; 
else 
    message = [NSString stringWithFormat:@"%c%@",char2,message]; 

if (char1 == '\0') 
    message = [NSString stringWithFormat:@"\0%@",message]; 
else 
    message = [NSString stringWithFormat:@"%c%@",char1,message]; 

但是,如果任何人都可以有所贡献更短或更直观,那简直太好了。

+1

char变量是长度上的移位,与字符串的值没有任何关系,并且将0放入字符串中将不会执行任何操作(字符串以\ 0结尾)您真的想要做什么? – Mark 2012-04-08 21:50:25

+0

您可以将'NULL'放入char数组中,但您必须自己记录长度以及编写自己的打印例程,因为大多数C标准库函数都依赖于以NULL结尾的字符串。 – hellork 2012-04-08 21:54:51

+0

请注意,@ shellork:ASCII NUL'\ 0'U + 0000是一个字符代码; NULL是一个空指针常量。这些都不是一回事。 – 2012-04-08 22:00:10

回答

3

不要这样做。这是一个坏主意。例如,NSString在概念上是建立在16位Unicode字符上的,但是你试图预先存储字节。请注意,没有什么能保证NSString的内部表示是UTF-16或任何其他特定的编码。在任何情况下,当字符串被写出时,必须将其转换为任何编码,并且不太可能以您可以预测的方式保留长度前缀。

在特定的编码中,使用长度在前4位(或者8位对于64位长度更好)的字节后接字符串的NSData。我推荐UTF-8。

+0

是的,我不知道为什么我没有想到继续前进,只是使用NSData,因为这正是我把NSString变成了什么。谢谢 – 2012-04-08 23:04:08