Cocoa touch 如何添加nsdata
如何附加nsdata,我将在套接字上发送的第一条消息上附加长度数据 我使用这样的代码,但运行时出错Cocoa touch 如何添加nsdata,cocoa-touch,nsdata,Cocoa Touch,Nsdata,如何附加nsdata,我将在套接字上发送的第一条消息上附加长度数据 我使用这样的代码,但运行时出错 int lendata = [message length]; NSData *firstdata = [NSData dataWithBytes: &lendata length: sizeof(lendata)]; NSData *mdata = [message dataUsingEncoding:NSUTF8StringEncoding]; NSMutableData *secon
int lendata = [message length];
NSData *firstdata = [NSData dataWithBytes: &lendata length: sizeof(lendata)];
NSData *mdata = [message dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData *seconddata = [NSData dataWithData:mdata];
[firstdata appendData:secondata];
请告诉我还有别的办法吗
谢谢你的帮助。瞥一眼我的水晶球:
seconddata
声明为NSMutableData
实例,但随后使用[NSData dataWithData:
而不是[NSMutableData dataWithData:
]对其进行初始化,因此seconddata
最终将不可更改,并且无法追加到它firstdata
,这也是不可变的firstdata
可变:
NSMutableData *firstdata = [NSMutableData dataWithBytes: &lendata
length: sizeof(lendata)];
[firstData appendData:[message dataUsingEncoding:NSUTF8StringEncoding]];
然后您可以安全地删除mdata
和seconddata
,因为它们不再需要了
NSMutableData *first_data = [NSMutableData dataWithContentsOfURL:self.firstURL];
NSMutableData *second_data = [NSMutableData dataWithContentsOfURL:self.secondURL];
[first_data appendData:second_data];
[first_data writeToURL:url atomically:YES];
请编辑您的答案并格式化您的代码:只需选择它,然后按
{}
按钮将其缩进四个空格(这是我们对“代码”的标记)。@Henrik p.Hessel:很可能是NSData
不对appendData:
做出响应的错误。谢谢Tamas,这是有效的,但我仍然有问题,我的nsstring数据是42个字符的len,我想在第一个数据上添加hexa a2(42 dec)数据,但输出是a2 00 00 XX XX XX,直到42个字符,XX是正确的,但为什么a2有00 00?我的哪个代码是错误的?在您的系统中,整数存储在四个字节中,因此[NSMutableData dataWithBytes:&lendata length:sizeof(lendata)]
存储四个字节。这是意料之中的。如果您只想存储一个字节,请使用unsigned char
作为lendata
的类型,并确保字符串长度不超过255个字符。顺便说一句,如果消息中包含的字符在UTF-8编码中由多个字节编码,您将遇到麻烦。我首先将消息转换为NSData
(例如,NSData*msgdata=[messagedatausingencoding:NSUTF8StringEncoding]
),然后使用msgdata
的长度而不是字符串的长度。