数据类型变换--移位运算

博客讨论了如何将COBOL数据类型S9(9) COMP等在AIX和mainframe DB2之间的文件格式转换问题。转换过程中涉及到16进制存储、文本读取和二进制写入,特别是对于数值如132000在不同平台上的存储差异。通过位移运算和位与操作实现了从AIX db2的文本格式到mainframe db2 unload所需的二进制格式转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

COBOL数据类型   S9(9) COMP十六进制存储方式。

S9(4) COMP 以下 2 byte

S9(5) COMP – S9(9) COMP 4 byte

S9(10) COMP 以上 5 byte

 

需求:文件格式转换。 使得AIX db2 export数据和mainframe db2 unload数据一致。

AIX db2 export文件格式:1,132000,”abc”

mainframe db2 unload文件格式:00 00 00 01 00 02 03 A0 41 42 43

unload需要通过binary方式来进行,才能得到上面的数据存储。但是这样的话,”abc”的内容便不是上面列出的那样了。

文本方式读入export

string snum = “132000”;

int num = atoi(snum.c_str());  此时,num的内容为 A0 03 02 00

以binary方式写入fstream

fs << (char*)&num ; 内存中存储 A0 03 02 00

这种方式和CPU是按先高位后低位,还是先低位后高位有关系。

通过本函数的转换可以实现 00 02 03 A0

位与FF保存需要的byte, 00清空不需要的byte。移位时被移掉的位会被清零。

中间变量nbyte可以被去掉

short num = atoi(strNum); num = ((num << 8) & 0xff00) | ((num >> 8)  & 0x00ff);

便能够得到想要的结果

int binaryWriteNu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值