Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在ObjC中声明原始二进制/十六进制数据以及如何在参数中传递它?_Python_Objective C_Ios - Fatal编程技术网

Python 如何在ObjC中声明原始二进制/十六进制数据以及如何在参数中传递它?

Python 如何在ObjC中声明原始二进制/十六进制数据以及如何在参数中传递它?,python,objective-c,ios,Python,Objective C,Ios,这就是我在Python中的功能: ourAddr = Binary('\x4c\x6f\x8c') char *addr = "\x4c\x6f\x8c"; NSArray *hex = [NSArray arrayWithObjects: [NSNumber numberWithChar: addr], nil]; [waitOnEvent setMethod:@"waitOnEvent" withObjects: hex]; NSString *const hex = @"4c6f8c

这就是我在Python中的功能:

ourAddr = Binary('\x4c\x6f\x8c')
char *addr = "\x4c\x6f\x8c";

NSArray *hex = [NSArray arrayWithObjects: [NSNumber numberWithChar: addr], nil];
[waitOnEvent setMethod:@"waitOnEvent" withObjects: hex];
NSString *const hex = @"4c6f8c"

NSArray *pass = [NSArray arrayWithObjects:hex, nil];

NSString *server = @"http://192.168.0.x:8080"; 
    XMLRPCRequest *waitOnEvent = [[XMLRPCRequest alloc] initWithHost:[NSURL URLWithString:server]];
    [waitOnEvent setMethod:@"waitOnEvent" withObjects:pass];
16:23:08:448 INFO     http_server waitOnEvent(4c6f8c, )
16:23:08:470 INFO     http_server 192.168.0.x:52982 - -  "POST / HTTP/1.1" 200 458

16:23:08:477 INFO     http_server <?xml version='1.0'?>
<methodResponse>
<fault>
<value><struct>
<member>
<name>faultCode</name>
<value><int>1</int></value>
</member>
<member>
<name>faultString</name>
<value><string>&lt;type 'exceptions.RuntimeError'&gt;:Non-licensed address provided</string></value>
</member>
</struct></value>
</fault>
</methodResponse>
我需要在ObjC中声明它,然后将它传递给另一台服务器上运行的python脚本

我就是这样尝试的:

ourAddr = Binary('\x4c\x6f\x8c')
char *addr = "\x4c\x6f\x8c";

NSArray *hex = [NSArray arrayWithObjects: [NSNumber numberWithChar: addr], nil];
[waitOnEvent setMethod:@"waitOnEvent" withObjects: hex];
NSString *const hex = @"4c6f8c"

NSArray *pass = [NSArray arrayWithObjects:hex, nil];

NSString *server = @"http://192.168.0.x:8080"; 
    XMLRPCRequest *waitOnEvent = [[XMLRPCRequest alloc] initWithHost:[NSURL URLWithString:server]];
    [waitOnEvent setMethod:@"waitOnEvent" withObjects:pass];
16:23:08:448 INFO     http_server waitOnEvent(4c6f8c, )
16:23:08:470 INFO     http_server 192.168.0.x:52982 - -  "POST / HTTP/1.1" 200 458

16:23:08:477 INFO     http_server <?xml version='1.0'?>
<methodResponse>
<fault>
<value><struct>
<member>
<name>faultCode</name>
<value><int>1</int></value>
</member>
<member>
<name>faultString</name>
<value><string>&lt;type 'exceptions.RuntimeError'&gt;:Non-licensed address provided</string></value>
</member>
</struct></value>
</fault>
</methodResponse>
但是我得到的回答是:“提供了未授权的地址”,这让我觉得它没有正确地看到'addr'变量。如有任何建议,将不胜感激

提前谢谢

编辑:

我通过执行以下操作将其作为字符串发送:

ourAddr = Binary('\x4c\x6f\x8c')
char *addr = "\x4c\x6f\x8c";

NSArray *hex = [NSArray arrayWithObjects: [NSNumber numberWithChar: addr], nil];
[waitOnEvent setMethod:@"waitOnEvent" withObjects: hex];
NSString *const hex = @"4c6f8c"

NSArray *pass = [NSArray arrayWithObjects:hex, nil];

NSString *server = @"http://192.168.0.x:8080"; 
    XMLRPCRequest *waitOnEvent = [[XMLRPCRequest alloc] initWithHost:[NSURL URLWithString:server]];
    [waitOnEvent setMethod:@"waitOnEvent" withObjects:pass];
16:23:08:448 INFO     http_server waitOnEvent(4c6f8c, )
16:23:08:470 INFO     http_server 192.168.0.x:52982 - -  "POST / HTTP/1.1" 200 458

16:23:08:477 INFO     http_server <?xml version='1.0'?>
<methodResponse>
<fault>
<value><struct>
<member>
<name>faultCode</name>
<value><int>1</int></value>
</member>
<member>
<name>faultString</name>
<value><string>&lt;type 'exceptions.RuntimeError'&gt;:Non-licensed address provided</string></value>
</member>
</struct></value>
</fault>
</methodResponse>
这是我尝试传递字符串时从服务器获得的信息:

ourAddr = Binary('\x4c\x6f\x8c')
char *addr = "\x4c\x6f\x8c";

NSArray *hex = [NSArray arrayWithObjects: [NSNumber numberWithChar: addr], nil];
[waitOnEvent setMethod:@"waitOnEvent" withObjects: hex];
NSString *const hex = @"4c6f8c"

NSArray *pass = [NSArray arrayWithObjects:hex, nil];

NSString *server = @"http://192.168.0.x:8080"; 
    XMLRPCRequest *waitOnEvent = [[XMLRPCRequest alloc] initWithHost:[NSURL URLWithString:server]];
    [waitOnEvent setMethod:@"waitOnEvent" withObjects:pass];
16:23:08:448 INFO     http_server waitOnEvent(4c6f8c, )
16:23:08:470 INFO     http_server 192.168.0.x:52982 - -  "POST / HTTP/1.1" 200 458

16:23:08:477 INFO     http_server <?xml version='1.0'?>
<methodResponse>
<fault>
<value><struct>
<member>
<name>faultCode</name>
<value><int>1</int></value>
</member>
<member>
<name>faultString</name>
<value><string>&lt;type 'exceptions.RuntimeError'&gt;:Non-licensed address provided</string></value>
</member>
</struct></value>
</fault>
</methodResponse>
16:23:08:448信息http_服务器waitOnEvent(4c6f8c,)
16:23:08:470信息http_服务器192.168.0.x:52982--“POST/http/1.1”200 458
16:23:08:477信息http_服务器
故障码
1.
断层串
类型“exceptions.RuntimeError”:提供了未授权的地址

您的诊断是准确的;根据文件

创建并返回包含给定值的NSNumber对象, 将其视为签名字符

因此,您正在创建的NSNumber有一个值,该值来自您的C样式字符串恰好被分配的地址,并且与字符串的值完全无关

我不完全确定你想要什么,但我认为可能:

[NSNumber numberWithInt:0x4c6f8c]
从C十六进制原语0x4c6f8c(十进制为5009292)中指定NSNumber对象


如果你想把字节值放进一个数组中,只读取总值,你就必须考虑CudiaNess问题,因为C是相对较低的级别,Objul-C直接继承它。如果在2到36之间的任意基数中有一个数字的C字符串,并且希望从中得到一个整数,则可以使用C函数。

您是想将数据作为ASCII/UTF-8编码的十六进制字符串还是原始二进制数据发送

如果是后者,您可以执行以下操作(我已相应地使用了您的代码):


为什么不能将字符串按原样传递给Python并让它为您进行转换呢?我已经尝试过了。我从python服务器上得到了一个“未授权的地址”……您能发布代码,说明如何将其作为字符串发送到python端吗?另外,您可能需要记录在Python中获得的值,以确保其符合您的预期。好的,通过编辑,我发现Python和ObjC端没有相同的字符串。您应该将ObjC端更改为完全匹配,然后重试。另外,尝试使用[NSArray arrayWithObjects:[hex CStringUsingEncode:NSASCIIStringEncoding],nil]在数组中存储与C兼容的字符串;在Python端打印出您得到的值肯定会有助于缩小问题的范围-您有权对代码进行更改吗?两边的字符串有什么不同?您是说在'char*addr=“\x4c\x6f\x8c”和'NSString*const hex=@“4c6f8c”之间?ASCII编码给我一个错误:UnicodeDecodeError:“ASCII”编解码器无法解码位置48处的字节0xc2:序号不在范围(128)内我无权更改python服务器代码。不过,我可以发布python客户机代码。也许这可以缩小传递给服务器的确切内容的范围。原始二进制文件是正确的。看来这个方法正是我需要的。Python服务器不再出现错误。现在我只需要正确格式化传入的字符串。非常感谢你的帮助!我真的很感激!