从十六进制转换为十进制

2020-08-31 03:18发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的专家,

我有一个来自#C的十六进制数据类型的代码,如下所示

0x01,它将在串行端口中读取为01

如何将其转换为abap代码?

数据:x输入i。

x = cl_abap_codepage => convert_to('0x02')

预期结果应为2

但我得到813183026

谢谢

山姆

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的专家,

我有一个来自#C的十六进制数据类型的代码,如下所示

0x01,它将在串行端口中读取为01

如何将其转换为abap代码?

数据:x输入i。

x = cl_abap_codepage => convert_to('0x02')

预期结果应为2

但我得到813183026

谢谢

山姆

付费偷看设置
发送
4条回答
落灬小鱼
1楼 · 2020-08-31 04:03.采纳回答

要将包含FF十六进制值(十进制255)的一个字节转换为整数变量:

 DATA:字节TYPE x LENGTH 1,
       整数TYPE i。

 字节='FF'。
 整数=字节。
 ASSERT整数= 255。

ABAP文档 -基本数据对象的转换规则►源字段类型x►数字目标字段

  • 目标i,(b,s):仅转换源字段的最后4个字节。 如果源字段短于4个字节,则在左侧将其加长十六进制0,直到它长4个字节为止。 这些字节的内容被解释为以大尾数顺序存储的数字,类型为i。 从" 00000000"到" 7FFFFFFF"的十六进制值被分配给从+0到+2147483647的数字,从" 80000000"到" FFFFFFFF"的十六进制值被分配给数字-2147483648到-1。 以这种方式获得的数字将转换为相应整数的内部表示形式。

PS:关于您的问题的其他说明:

" ABAP将0x ..."解释为两个字符,没有特殊含义。

如果要表示字节值:

数据字节类型x长度1。
 字节='FF'。  "这两个字符FF被解释为十六进制,因为字节的类型为X
 DATA(byte_string)= CONV xstring('FF00FF00')。  " 4字节/解释为六字节,因为键入XSTRING 

有关更多信息: ABAP文档-基本数据对象的转换规则

cl_abap_codepage的CONVERT_TO方法通过使用编码将文本(" 0x02"是四个字符)转换为字节 参数,其默认值为UTF-8(在您的情况下,所有四个字符都是US-ASCII的一部分,所以它是四个字节,十六进制表示为'30783032')。

但是您将其传输到整数变量, 因此适用从X到I的标准转换规则(请参阅上面的链接中的说明),该规则将给出813183026(如在"程序员"模式下在Windows计算器中看到的:按"十六进制",键入" 30783032",然后看到" 813 183" " DEC"旁边的" 026"。)请注意,如果您的系统是Little Endian类型,SAP也可能会给出" 842 037 296"。

小灯塔
2楼-- · 2020-08-31 03:52

请使用CODE按钮格式化您的 代码,以便它 以更用户友好的格式显示(彩色)。

宇峰Kouji
3楼-- · 2020-08-31 03:50

@ @ Sandra Rossi ,您应该将注释转换为答案

绿领巾童鞋
4楼-- · 2020-08-31 03:44

Frederic Girod 完成。 一切都合并为一个答案。

一周热门 更多>