从肥皂请求读取xsd__hex二进制数据

时间:2018-08-17 09:14:13

标签: c++ gsoap

我正在使用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成员值背后的逻辑。

  1. 如何根据输入的十六进制数据确定__size成员?

    • 如果请求xsd__hexBinary是 FF ,则__size的值应为1。
    • 如果请求xsd__hexBinary为 0FB7 ,则__size的值为3。我希望__size为2,因为4个十六进制值表示16位数据。
    • 如果请求xsd__hexBinary为 F ,则__size的值为0
  2. 如何从请求中正确读取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。

我真的很感谢任何建议!

0 个答案:

没有答案