Ios 发布发送值>;127
在阅读了有关NSString的文档后,似乎NSString可能是7位或8位(尽管根据注释判断,这可能是完全错误的)。我对Objective-C非常陌生,遇到了一些语法问题。这是我当前的字符串: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*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个值之外,所有这些都运行良好。