MQCHARV-变量长度字符串

使用 MQCHARV 结构来描述可变长度字符串。

可用性

MQCHARV 结构在以下平台上可用:
  • [AIX]AIX®
  • [IBM i]IBM® i
  • [Linux]Linux®
  • [Windows]Windows
以及用于连接到这些系统的 IBM MQ MQI clients

字符集和编码

MQCHARV 中的数据必须采用 MQENC_NATIVE 提供的本地队列管理器的编码以及结构中 VSCCSID 字段的字符集。 如果应用程序作为 MQ 客户机运行,那么结构必须采用客户机的编码。 某些字符集具有依赖于编码的表示。 如果 VSCCSID 是这些字符集之一,那么所使用的编码与 MQCHARV 中其他字段的编码相同。 由 VSCCSID 标识的字符集可以是双字节字符集 (DBCS)。

用法

MQCHARV 结构处理可能与包含它的结构不相邻的数据。 要处理此数据,可以使用使用指针数据类型声明的字段。 请注意, COBOL 并非在所有环境中都支持指针数据类型。 因此,也可以使用包含从包含 MQCHARV 的结构开始的数据偏移量的字段来对数据进行寻址。

字段

请注意: 在下表中,字段按用途分组,而不是按字母顺序排列。
表 1. MQCHARV 中的字段
字段名称和描述 常量的名称 常量的初始值 (如果有)
VSPtr(指向变长字符串的指针) None 空指针或空字节。
VSOffset(可变长度字符串从包含此 MQCHARV 结构的结构开始的偏移量,以字节为单位) None 0
VSBufSize(VSPtr 或 VSOffset 字段寻址的缓冲区大小,以字节为单位) mqvs_use_vslength 0
VSLength(由 VSPtr 或 VSOffset 字段寻址的可变长度字符串的长度,以字节为单位) None 0
VSCCSID(由 VSPtr 或 VSOffset 字段寻址的可变长度字符串的字符集标识符) MQCCSI_APPL -3
注: 在 C 编程语言中,宏变量 MQCHARV_DEFAULT 包含表中列出的值。 它可以通过以下方式用于为结构中的字段提供初始值:
MQCHARV MyVarStr = {MQCHARV_DEFAULT};

语言声明

MQCHARV 的 C 声明

typedef struct tagMQCHARV MQCHARV;
struct tagMQCHARV {
  MQPTR     VSPtr;               /* Address of variable length string */
  MQLONG    VSOffset;            /* Offset of variable length string */
  MQLONG    VSBufSize;           /* Size of buffer */
  MQLONG    VSLength;            /* Length of variable length string */
  MQLONG    VSCCSID;             /* CCSID of variable length string */
};

COBOL MQCHARV 的声明

** MQCHARV structure
 10  MQCHARV.
** Address of variable length string
 15  MQCHARV-VSPTR        POINTER.
** Offset of variable length string
 15  MQCHARV-VSOFFSET     PIC S9(9) BINARY.
** Size of buffer
 15  MQCHARV-VSBUFSIZE    PIC S9(9) BINARY.
** Length of variable length string
 15  MQCHARV-VSLENGTH     PIC S9(9) BINARY.
** CCSID of variable length string
 15  MQCHARV-VSCCSID      PIC S9(9) BINARY.
注意: 若要在不同环境间移植 COBOL 应用程序,必须确认目标环境是否均支持该指针数据类型。 否则,应用程序必须使用偏移量字段而不是指针字段来寻址数据。 在不支持指针的环境中,可以将指针字段声明为适当长度的字节字符串,初始值为全空字节字符串。 如果您正在使用偏移量字段,请不要更改此初始值。 在不更改提供的副本的情况下执行此操作的一种方法是使用以下内容:
COPY CMQCHRVV REPLACING POINTER BY ==BINARY PIC S9(9)==.
其中,可以将 CMQCHRVV 交换为要使用的副本。

PL/I MQCHARV 的声明

dcl
 1 MQCHARV based,
  3 VSPtr       pointer,       /* Address of variable length string */
  3 VSOffset    fixed bin(31), /* Offset of variable length string */
  3 VSBufSize   fixed bin(31), /* Size of buffer */
  3 VSLength    fixed bin(31), /* Length of variable length string */
  3 VSCCSID     fixed bin(31); /* CCSID of variable length string */

MQCHARV 的 High Level Assembler 声明

MQCHARV             DSECT
MQCHARV_VSPTR       DS   F     Address of variable length string 
MQCHARV_VSOFFSET    DS   F     Offset of variable length string 
MQCHARV_VSBUFSIZE   DS   F     Size of buffer
MQCHARV_VSLENGTH    DS   F     Length of variable length string
MQCHARV_VSCCSID     DS   F     CCSID of variable length string
*
MQCHARV_LENGTH      EQU  *-MQCHARV
                    ORG  MQCHARV
MQCHARV_AREA        DS   CL(MQCHARV_LENGTH)