Types 字符十六进制转换导致ABAP转储

Types 字符十六进制转换导致ABAP转储,types,char,hex,abap,Types,Char,Hex,Abap,我需要将字符(char20)转换为十六进制值。我得出了以下结论: CALL FUNCTION 'CHAR_HEX_CONVERSION' EXPORTING input = character IMPORTING hexstring = character_hex. 但是,在执行此操作时,我总是会遇到运行时错误 我做错了什么?我刚刚测试了字符十六进制转换,得到了我认为相同的转储: 对于“WRITE src TO dest”语句,只能使用平面字符类型 参数位置“d

我需要将字符(
char20
)转换为十六进制值。我得出了以下结论:

CALL FUNCTION 'CHAR_HEX_CONVERSION'
  EXPORTING
    input     = character
  IMPORTING
    hexstring = character_hex.
但是,在执行此操作时,我总是会遇到运行时错误


我做错了什么?

我刚刚测试了字符十六进制转换,得到了我认为相同的转储:

对于“WRITE src TO dest”语句,只能使用平面字符类型 参数位置“dest”支持数据对象

在这种情况下,操作数“dest”具有非字符类型或 非扁平型“X”。当前程序是一个Unicode程序。在 Unicode上下文,类型“X”或结构包含 字符类型组件被视为非字符类型


我认为是使用
X
类型导致了转储。我还没有发现另一个发布的功能模块可以进行转换(手工编码很容易,但我很懒!),但我可以建议使用以下功能模块:
CRM\u EI\u KB\u CONV\u DEC\u TO\u HEX
。尽管名称不同,但它在ECC 6.0系统中可用,应该可以满足您的需要。

我刚刚测试了
CHAR\u HEX\u转换
,我得到了我认为相同的转储:

对于“WRITE src TO dest”语句,只能使用平面字符类型 参数位置“dest”支持数据对象

在这种情况下,操作数“dest”具有非字符类型或 非扁平型“X”。当前程序是一个Unicode程序。在 Unicode上下文,类型“X”或结构包含 字符类型组件被视为非字符类型


我认为是使用
X
类型导致了转储。我还没有发现另一个发布的功能模块可以进行转换(手工编码很容易,但我很懒!),但我可以建议使用以下功能模块:
CRM\u EI\u KB\u CONV\u DEC\u TO\u HEX
。尽管名称不同,但它在ECC 6.0系统中可用,并且应该执行您需要的操作。

将输入值传递给fieldsymbol时会发生转储,fieldsymbol指的是导出参数。在代码中,它是一个assign语句,后面添加了类型“X”,我通常不建议这样做


我还对这个模块和它的函数组做了一个usedwhere检查,它似乎没有被调用,至少没有被直接调用。很可能,整个功能组从未被释放

将输入值传递给fieldsymbol时会发生转储,fieldsymbol是指导出参数。在代码中,它是一个assign语句,后面添加了类型“X”,我通常不建议这样做



我还对这个模块和它的函数组做了一个usedwhere检查,它似乎没有被调用,至少没有被直接调用。很可能,整个功能组从未被释放

您可以尝试使用
SCMS
功能模块,它们还负责代码页转换。尝试使用
SCMS\u TEXT\u TO_BIN
SCMS\u STRING\u TO_XSTRING
您可以尝试使用
SCMS
功能模块-它们还负责代码页转换。请尝试
SCMS_TEXT_TO_BIN
SCMS_STRING_TO_XSTRING

哪个运行时错误?UC_OBJECTS_NOT_CHAR但是变量“character”被声明为char20。。。真奇怪你在参数
输入中传递了什么值?输入和输出参数的类型是什么?它来自调用函数,它是一个CHAR20,大多数时候只包含一个字符。请考虑将A添加到您的问题中。这将提高您获得有用答案的机会。到底是哪个运行时错误?UC_OBJECTS_NOT_CHAR但是变量“character”被声明为char20。。。真奇怪你在参数
输入中传递了什么值?输入和输出参数的类型是什么?它来自调用函数,它是一个CHAR20,大多数时候只包含一个字符。请考虑将A添加到您的问题中。这将提高您获得有用答案的机会。首先,感谢您的帮助!所以这意味着我必须使用不同的函数/创建自己的函数,对吗?首先,感谢您的帮助!所以这意味着我必须使用不同的函数/制作自己的函数,对吗?好的,非常感谢!我会尝试让它工作,一旦它工作,就会将您的答案标记为正确(顺便说一句,这是相同的转储)。此函数模块将十进制数转换为其等效的十六进制值(255-->0xFF),而不是将任意字符转换为其十六进制值(“a”-->0x41或其他任何字符,取决于编码)。@vwegert-Ah-yes,好的一点-我错过了OP想要将任意字符转换为十六进制的一点。实际上我不想转换任意字符,所以你的答案是正确的,非常感谢!应该写的。很抱歉,我不能将两个答案都标记为正确,但我相信这将帮助其他谷歌用户!好的,非常感谢!我会尝试让它工作,一旦它工作,就会将您的答案标记为正确(顺便说一句,这是相同的转储)。此函数模块将十进制数转换为其等效的十六进制值(255-->0xFF),而不是将任意字符转换为其十六进制值(“a”-->0x41或其他任何字符,取决于编码)。@vwegert-Ah-yes,好的一点-我错过了OP想要将任意字符转换为十六进制的一点。实际上我不想转换任意字符,所以你的答案是正确的,非常感谢!应该写的。很抱歉,我不能将两个答案都标记为正确,但我相信这将帮助其他谷歌用户!不会很方便,因为我需要在后面使用位异或运算符,它只接受十六进制。不过还是要谢谢你!“方便”比“正确”更重要吗?至少在我的fr系统上