这就是我在Python中所拥有的:
ourAddr = Binary('\x4c\x6f\x8c')
我需要在ObjC中声明它然后将它传递给在另一台服务器上运行的python脚本。
这就是我一直在尝试的方式:
char *addr = "\x4c\x6f\x8c";
NSArray *hex = [NSArray arrayWithObjects: [NSNumber numberWithChar: addr], nil];
[waitOnEvent setMethod:@"waitOnEvent" withObjects: hex];
但是我得到了回复:“提供了非许可地址”,这使我认为它没有正确地看到'addr'变量。任何建议都将不胜感激。
提前致谢!
编辑:
我通过执行以下操作将其作为字符串发送:
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><type 'exceptions.RuntimeError'>:Non-licensed address provided</string></value>
</member>
</struct></value>
</fault>
</methodResponse>
答案 0 :(得分:2)
您是否尝试将数据作为ASCII / UTF-8编码的十六进制字符串或原始二进制数据发送?
如果是后者,您可以执行以下操作(我已相应地使用了您的代码):
const char addr[] = {0x4c, 0x6f, 0x8c};
NSData *data = [NSData dataWithBytes:addr length:sizeof(addr)];
NSArray *array = [NSArray arrayWithObject:data];
[waitOnEvent setMethod:@"waitOnEvent" withObjects:array];
答案 1 :(得分:0)
您的诊断准确无误;根据文档+numberWithChar:
创建并返回包含给定值的NSNumber对象, 将其视为签名的字符。
因此,您正在创建的NSNumber的值来自您的C样式字符串恰好被分配的地址,并且与字符串的值完全无关。
我不完全确定你想要什么,但我想可能:
[NSNumber numberWithInt:0x4c6f8c]
从C十六进制原语0x4c6f8c给出一个NSNumber对象,即十进制的5,009,292。
如果要将字节值放入数组并只读取总值,则必须考虑字节序问题,因为C的级别相对较低,而Objective-C直接从它继承。如果您在2到36之间的任何基数中都有一个C字符串,并且想要从中获取整数,则可以使用C函数strtol
。