股票

char型字符转换为NSString / NSString字符串的连接问题

今天给小车添加速度控制模块最主要的问题就是 UISlider 的返回值 int 型的数据如何转换为 NSString 型数据,然后与串口协议“#2X#”进行组合,即NSString字符串的连接问题。

我的解决方法是,先把 int 型数据转换成其对应的ASC码,即 char 型数据,然后把char型数据转换为 NSString ,最后进行NSString连接。

1,int 转 char。直接进行强制类型转换:char *speedChar=(char)speedInt;Xcode会提示警告,不用理他。生成的speedChar是speedInt对应的ASC码。
2,char 转 NSString。这个比较复杂了。
网上找了很多方法,有直接把char转换为NSString:
NSString *speedValue=[NSString stringWithCString:speedChar encoding:NSUTF8StringEncoding];
这种方法经我验证,对普通的字符串可行,即speedChar=‘a’这种。但是这里的char为ASC码,按这种方法生成的speedValue为空值:0x00000000,方法失败。
还有一种是,把char型数据先转换成NSData,然后再把NSData转换成NSString:
NSData *data=[NSData dataWithBytes:speedChar length:length(speedChar)];
NSString *speedValue=[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
( NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];//这句未验证)
这种方法和上一种一样,得到的结果都是空值。
至于我的方法,等下再说。
3,NSString连接。这个网上有三种方法:
NSString* string; // 结果字符串
NSString* string1, string2; //已存在的字符串
1). string = [NSString initWithFormat:@”%@,%@”, string1, string2 ];
2). string = [string1 stringByAppendingString:string2];
3). string = [string stringByAppendingFormat:@”%@,%@”,string1, string2];
这三种方法都会将string1和string2合并,string2接在string1后面。
原帖地址:NSString字符串相加 相连接
最开始我用的第一种方法,因为我认为既然可以合并两个字符串,那也就可以合并三个字符串,于是我写下了:
message=[message initWithFormat:@”%@,%@,%@”,speedHead,speedValue,speedEnd];
但是得到的message是空值,我还以为是只能两个叠加呢,改成两个也不行,于是放弃了。然后我用第二种方法试,成功合并了字符串。这时候,我受到这个函数的启发,写下了下面一句话:
speedValue=[speedValue stringByAppendingString:@”%c”,speedChar];
是不是很熟悉?对,就是根据方法2)创造的char转换NSString的方法,但是Xcode提示错误!不过没关系,我们还有两个方法可以改:
speedValue=[speedValue initWithFormat:@”%c”,speedChar];
speedValue=[speedValue stringByAppendingFormat:@”%c”,speedChar];
第一种方法输出的是空值(现在注意到了,函数格式可能有错误,speedValue应该是NSString),但第三种方法成功把speedChar的ASC码值转换成了对应的NSString对象!
至此,问题得到完美解决。

附源代码:

  1. – (IBAction)speedController:(UISlider *)sender {
  2.     slider=(UISlider *)sender;
  3.     int speedInt=(int)roundf(slider.value);
  4.     char *speedChar=(char)speedInt;
  5.     NSString *speedValue=[[NSString alloc]init];
  6.     //NSString *speedValue=[NSString stringWithCString:speedOfCar encoding:NSUTF8StringEncoding];
  7.     //NSString *speedValue=[[NSString alloc]initWithData:data encoding:NSASCIIStringEncoding];
  8.     speedValue=[speedValue stringByAppendingFormat:@“%c”,speedChar];
  9.     NSString *speedHead=@“#2”;
  10.     NSString *speedEnd=@“#”;
  11.     NSString *messageHead;
  12.     messageHead=[speedHead stringByAppendingString:speedValue];
  13.     NSString *message;
  14.     message=[messageHead stringByAppendingString:speedEnd];
  15.     NSLog(@“%@”,message);
打赏
原文链接:,转发请注明来源!

发表评论