Ibm midrange 在RPGLE中移动来自不同数据类型的字节

Ibm midrange 在RPGLE中移动来自不同数据类型的字节,ibm-midrange,rpgle,Ibm Midrange,Rpgle,假设我有这个程序界面和那些变量: dcl-pi *n varchar(5000); fileName char(10) const; newRecord char(5000) const; end-pi; dcl-s valueNew char(5000) inz; dcl-s ptrMyGraph pointer inz(*null); dcl-s myGraphic graph(160) based(ptrMyGraph); 现在我在val

假设我有这个程序界面和那些变量:

dcl-pi *n varchar(5000);       
  fileName char(10) const;     
  newRecord char(5000) const;  
end-pi;     

dcl-s valueNew char(5000) inz; 
dcl-s ptrMyGraph pointer inz(*null);
dcl-s myGraphic graph(160) based(ptrMyGraph);
现在我在
valueNew
变量中移动一段大条目字符串,这是一种记录格式 它是一个
图形(40)
子字段。

valueNew = %subst(newRecord:i:fieldHeader.length);
然后我将
valueNew
的内存空间复制到实际图形变量

ptrMyGraph = %alloc(fieldHeader.length);
memcpy(ptrMyGraph:%addr(valueNew):fieldHeader.length);
理论上我应该得到一个可表示的图形变量。但事实并非如此。
我做错了什么?

我关心的是你移动的长度
memcpy
需要字节,但长度是否以字符为单位?这两者在图形方面是不一样的。这里缺少了很多东西,这让我猜测。API调用返回的字段长度对于图(40)被设置为80,因此我认为这是正确的。您是否查看了调试中的字段以确定是否有任何自动转换在幕后进行?我不认为
memcpy
会做任何转换,但是把一个图形字段放在一个字符字段中可能会有。数据从哪里来?你看过调试中的十六进制表示吗?它是正确的还是损坏的?是否可能通过ASCII-->EBCDIC转换?数据中到底有什么?如果使用Unicode,则UCS2可能是更好的选择……我调试了valueNew和原始数据结构字段之间的十六进制表示法,没有发现任何差异。我会发布图片。