Iphone 如何将uint8[]转换为字符串?
嗨 我正在做一个iPhone应用程序的工作 我在缓冲区中得到服务器的一些响应,数据类型为Uint8 现在我想用字符串匹配我的缓冲区,有人能告诉我如何检查它吗?给出了一段代码Iphone 如何将uint8[]转换为字符串?,iphone,objective-c,string,client-server,uint,Iphone,Objective C,String,Client Server,Uint,嗨 我正在做一个iPhone应用程序的工作 我在缓冲区中得到服务器的一些响应,数据类型为Uint8 现在我想用字符串匹配我的缓冲区,有人能告诉我如何检查它吗?给出了一段代码 void receiveData(CFSocketRef s, CFSocketCallBackType type, CFDataRef address, const void *data, void *info) { CFDataRef df = (CFDataRef) data; int len =
void receiveData(CFSocketRef s, CFSocketCallBackType type, CFDataRef address, const void *data, void *info)
{
CFDataRef df = (CFDataRef) data;
int len = CFDataGetLength(df);
if(len <= 0) return;
CFRange range = CFRangeMake(0,len);
UInt8 buffer[len];
NSLog(@"Received %d bytes from socket %d\n",
len, CFSocketGetNative(s));
CFDataGetBytes(df, range, buffer);
NSLog(@"Client received: %s\n", buffer);
NSLog(@"As UInt8 coding: %@", df);
[mTextViewAlias setText:[NSString stringWithUTF8String: buffer]];
////////////.............////////////
LoginViewController *lvc = [[LoginViewController alloc] init];
NSString *search = @"ACPT";
NSRange match;
match = [buffer rangeOfString: search];
if (match.location == NSNotFound)
NSLog (@"Invalid Username Or Password");
else
{
[lvc goToWatchList];
NSLog (@"match found at index %i", match.location);
}
}
void receiveData(CFSocketRef s、CFSocketCallBackType类型、CFDataRef地址、const void*数据、void*信息)
{
CFDataRef df=(CFDataRef)数据;
int len=CFDataGetLength(df);
如果(len出现警告是因为rangeOfString
是NSString
的一种方法,buffer
不是NSString
。我认为如果可以将数据转换为NSString会更好。我认为如果尝试使用stringWithData:
更新
请检查此项出现警告是因为rangeOfString
是一种NSString
方法,buffer
不是NSString
。我认为如果您可以将数据转换为NSString会更好。我认为如果您尝试使用stringWithData:
更新
请检查这个你在找这个吗
NSString *string = [[NSString alloc]
initWithData:(id)data
encoding:NSUTF8StringEncoding];
你在找这个吗
NSString *string = [[NSString alloc]
initWithData:(id)data
encoding:NSUTF8StringEncoding];
您的响应可能是UInt8
,但您不需要将其复制到UInt8[]
中,因为您已经在CFDataRef
中找到了它(假设您传入的void*
确实是CFDataRef
,如果不是,您还有其他问题…)-aCFDataRef
与NSData
免费桥接(即,您可以从一个转换到另一个),您可以直接从NSData
中的字节构造NSString
。您的代码,删除日志记录并添加直接NSString转换:
void receiveData(CFSocketRef s, CFSocketCallBackType type, CFDataRef address, const void *data, void *info)
{
LoginViewController *lvc = [[LoginViewController alloc] init];
NSString *buffer = [[NSString alloc] initWithData:(NSData *)data
encoding:NSUTF8StringEncoding];
NSRange match = [buffer rangeOfString:@"ACPT"];
[buffer release];
if (match.location == NSNotFound)
NSLog (@"Invalid Username Or Password");
else
[lvc goToWatchList];
}
或者,至少在您的示例代码中:您没有保存转换的缓冲区,正在使用文字字符串进行搜索,并且您使用%s
意味着数据以null结尾;您可以直接使用C函数完成所有这些操作,而无需创建中间对象:
void receiveData(CFSocketRef s, CFSocketCallBackType type, CFDataRef address, const void *data, void *info)
{
LoginViewController *lvc = [[LoginViewController alloc] init];
char *buffer = (char *)CFDataGetBytePtr((CFDataRef)data);
if (strstr(buffer, "ACPT") == NULL)
NSLog (@"Invalid Username Or Password");
else
[lvc goToWatchList];
}
您的响应可能是UInt8
,但您不需要将其复制到UInt8[]
中,因为您已经在CFDataRef
中找到了它(假设您传入的void*
确实是CFDataRef
,如果不是,您还有其他问题…)-aCFDataRef
与NSData
免费桥接(即,您可以从一个转换到另一个),您可以直接从NSData
中的字节构造NSString
。您的代码,删除日志记录并添加直接NSString转换:
void receiveData(CFSocketRef s, CFSocketCallBackType type, CFDataRef address, const void *data, void *info)
{
LoginViewController *lvc = [[LoginViewController alloc] init];
NSString *buffer = [[NSString alloc] initWithData:(NSData *)data
encoding:NSUTF8StringEncoding];
NSRange match = [buffer rangeOfString:@"ACPT"];
[buffer release];
if (match.location == NSNotFound)
NSLog (@"Invalid Username Or Password");
else
[lvc goToWatchList];
}
或者,至少在您的示例代码中:您没有保存转换的缓冲区,正在使用文字字符串进行搜索,并且您使用%s
意味着数据以null结尾;您可以直接使用C函数完成所有这些操作,而无需创建中间对象:
void receiveData(CFSocketRef s, CFSocketCallBackType type, CFDataRef address, const void *data, void *info)
{
LoginViewController *lvc = [[LoginViewController alloc] init];
char *buffer = (char *)CFDataGetBytePtr((CFDataRef)data);
if (strstr(buffer, "ACPT") == NULL)
NSLog (@"Invalid Username Or Password");
else
[lvc goToWatchList];
}
在这一行“match=[buffer rangeOfString:search];”下面出现警告“无效的接收器类型'Uint8[1]”;在这一行“match=[buffer rangeOfString:search];”下面出现警告“无效的接收器类型'Uint8[1]”thanx回答,你能给我一些细节,如何将uint8转换成字符串吗?如何使用StringWithData:?thanx回答,你能给我一些细节,如何将uint8转换成字符串吗?如何使用StringWithData:?嗯,像这样的东西会感染我想将uint8数组中的数据分配给字符串,但我没有得到它的确切信息你已经在data
变量中有了数据作为NSData
,为什么不从中创建字符串呢?啊,哇,我太傻了,为什么我不看数据呢我得到了一些类似于这种感染的东西,我想把Uint8数组中的数据分配给一个字符串,但我没有得到它,因为你已经在data
变量中有了数据作为NSData
,为什么你不从中创建字符串呢?啊,哇,我有多愚蠢,为什么我没有看数据?谢谢你,佐尔:)我得到了它