Ios 发布发送值>;127

Ios 发布发送值>;127,ios,objective-c,encoding,nsstring,bits,Ios,Objective C,Encoding,Nsstring,Bits,在阅读了有关NSString的文档后,似乎NSString可能是7位或8位(尽管根据注释判断,这可能是完全错误的)。我对Objective-C非常陌生,遇到了一些语法问题。这是我当前的字符串: NSString*charles=[[NSString stringWithFormat:@“%c”,i]编码:NSUTF8StringEncoding] 我得到的错误是“选择器“编码”的实例方法未知”。有人知道将NSString从7位转换为8位的正确方法吗 更新: unichar value;

在阅读了有关NSString的文档后,似乎NSString可能是7位或8位(尽管根据注释判断,这可能是完全错误的)。我对Objective-C非常陌生,遇到了一些语法问题。这是我当前的字符串:

NSString*charles=[[NSString stringWithFormat:@“%c”,i]编码:NSUTF8StringEncoding]

我得到的错误是“选择器“编码”的实例方法未知”。有人知道将
NSString
从7位转换为8位的正确方法吗

更新:

unichar value;
    for (value = 0; value < 255; value++)  {
[_device writeToTerminal:[NSString stringWithFormat:@"%C", value]];

}
unichar值;
用于(值=0;值<255;值++){
[_DeviceWriteToTerminal:[NSString stringWithFormat:@“%C”,value]];
}
现在,0-127完美打印。端子上的输出如预期:01,02….A、B、C。。。1A、1B、1C等。 但是,一旦我达到127以上(打印为7F),我就会得到值“c280”,而它应该只是“80”


此外,我为我在问题中所做的任何错事道歉,以获得3张反对票。有人能解释一下我做错了什么,这样我以后就可以避免吗?

你想抓住C字符串:

NSString *charles = [NSString stringWithFormat:@"%c", i];
[charles UTF8String];

要创建一个
NSString
,其中包含一个范围为0的给定Unicode字符。。0xFFFF 您可以使用
%C
格式:

unichar c = ...;
NSString *charles = [NSString stringWithFormat:@"%C", c];
或者使用
stringWithCharacters

unichar c = ...;
NSString *charles = [NSString stringWithCharacters:&c length:1];
要恢复原始字符代码,请执行以下操作:

unichar c = [charles characterAtIndex:0];

“标准的
NSString
似乎只有7位“-WAT”
编码:NSUTF8StringEncoding
-WAT?你看过文档了吗?你真正想达到什么目的?什么是
i
,您希望得到什么结果?它们由unichar字符组成(每个字符2字节)。@H2CO3我错了,它只有7位吗?Martin R我正试图通过字符串发送0-255。我不知道OP是否真的知道他在问什么。不过,他说他会在[0255]中存储一个值,因此使用“uc”作为格式说明符可能是正确的。对于i>127,您可能最好使用%C格式…@MartinR好的,谢谢。当它达到127时,仍然会变成一堆C2和C3以及其他奇怪的字符,但我会尝试从这里找出原因,因为我无法清楚地解释它。@OralB:UTF-8对所有大于128的Unicode字符使用两个或更多字节。因此,如果对包含代码为0x80的字符的字符串调用
UTF8String
,则得到
c280
。如果这不是你想要的,那么你必须更好地解释你的问题。@MartinR啊,好的,这很有道理,谢谢。是的,我正试图避免C2 80,让它只显示80,我感觉我需要将它从UTF8切换到16位unicode,但不确定如何切换。Martin你太棒了,非常感谢@我可以问你为什么“不接受”这个答案吗?如果有问题,请告诉我。嘿,马丁!我实现了你的答案,但它似乎仍然在做“C2 80”,而不仅仅是80。我用我正在使用的代码和收到的输出更新了我的问题。@OralB:我不知道你的
writeToTerminal
方法做了什么,这使帮助变得非常困难:-)和
\u设备是什么请尽量提供你所做工作的完整信息。当然!
writeToTerminal
方法是来自第三方蓝牙LE库的一种方法,用于将数据发送到BLE芯片。该方法只接受
NSString
参数
\u device
是我在其中设置所有BLE信息的类的实例。我将设备连接到Windows机器上,启动终端,查看我发送的数据。除了>127个值之外,所有这些都运行良好。