我正在使用gSOAP v2.8.44使用C ++编写的SOAP Web服务。我的请求和响应消息都包含一个元素 instance_id ,其类型为 xsd__hexBinary
:class SOAP_CMAC xsd__hexBinary
{
public:
unsigned char *__ptr;
int __size;
}
我想出了如何将数据写入响应xsd__hexBinary元素,但是从请求中读取数据时似乎不起作用。我尝试通过读取__ptr所指向的char来读取xsd__hexBinary数据,然后将__ptr增加到下一个元素。我重复了__size次,但是读取的数据是我不理解的一些值。而且,我似乎无法理解__size成员值背后的逻辑。
如何根据输入的十六进制数据确定__size成员?
如何从请求中正确读取xsd__hexBinary数据?
这是我当前尝试读取数据的方式:
//intance_id is of type xsd__hexBinary
int size = instance_id.__size;
unsigned char *ptr;
ptr = instance_id.__ptr;
for(int j=0; j<size; j++)
{
printf("data: %X, %d", *ptr, *ptr);
ptr++;
}
对于FF请求,控制台中的输出为:
数据:7D,125
对于请求中的FE,控制台中的输出为:
数据:7D,125
对于请求中的0FB7,控制台中的输出为:
数据:D1,209
数据:F6、246
数据:FB,251
我如何将xsd__hexBinary写入soap_response的简单示例:
xsd__hexBinary * instance_id = soap_new_xsd__hexBinary(soap);
instance_id->__size = 2;
unsigned char * instance_id_ptr= (unsigned char *) soap_malloc(soap, sizeof(unsigned char[2]));
instance_id->__ptr = instance_id_ptr;
*instance_id_ptr= 10;
instance_id_ptr ++;
*instance_id_ptr = 255;
soap_response->instance_id = instance_id;
响应中,instance_id的结果值为预期的0AFF。
我真的很感谢任何建议!