我认为我对字节数组和字符数组的理解存在一些问题,以下是我的问题:
我有一个应用程序,从Websphere MQ中提取消息并将其发送到目标系统。
MQ消息具有代表消息的MSGID的MQBYTE24(基本上是字节数组24)。我的目标是将其转换为十六进制字符串。
在我的Linux框架上的WMQ浏览器中,队列中的第1个消息具有“AMQ QM01”的消息标识符(至少看起来像这样),并且下面显示了字节:
现在当我的代码运行时,我选择相同的消息ID并尝试将其转换为十六进制字符串。
在调试时,确切的消息ID是:
AMQ QM01 \275\364\250N\242\243\006
通过运行以下代码进行转换后,我得到的结果如下所示:
414D5120514D30312020202020202020FFFFFF4EFFFF6
你可以看到它与WMQ Explorer显示的略有不同,请问我在这里做错了什么?
我认为这是我从MQBYTE24转换为char时出了问题…...
以下是一个产生“错误结果”的小样本程序.....我想我必须使用字节数组而不是char?
以下是以下代码的输出结果:
结果:414D5120514D30312020202020202020FFFFFF4EFFFF6
谢谢您的帮助 :-)
Lynton
我有一个应用程序,从Websphere MQ中提取消息并将其发送到目标系统。
MQ消息具有代表消息的MSGID的MQBYTE24(基本上是字节数组24)。我的目标是将其转换为十六进制字符串。
在我的Linux框架上的WMQ浏览器中,队列中的第1个消息具有“AMQ QM01”的消息标识符(至少看起来像这样),并且下面显示了字节:
00000 41 4D 51 20 51 4D 30 31--20 20 20 20 20 20 20 20 |AMQ QM01 |
00010 BD F4 A8 4E A2 A3 06 20-- |...N... |
现在当我的代码运行时,我选择相同的消息ID并尝试将其转换为十六进制字符串。
在调试时,确切的消息ID是:
AMQ QM01 \275\364\250N\242\243\006
通过运行以下代码进行转换后,我得到的结果如下所示:
414D5120514D30312020202020202020FFFFFF4EFFFF6
你可以看到它与WMQ Explorer显示的略有不同,请问我在这里做错了什么?
我认为这是我从MQBYTE24转换为char时出了问题…...
以下是一个产生“错误结果”的小样本程序.....我想我必须使用字节数组而不是char?
以下是以下代码的输出结果:
结果:414D5120514D30312020202020202020FFFFFF4EFFFF6
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
char name[41]="AMQ QM01 \275\364\250N\242\243\006";
char buffer[82]="";
char *pbuffer = buffer;
FILE *fp_1;
FILE *fp_2;
int size;
char *buffer_1 = NULL;
char *buffer_2 = NULL;
int rc = convertStrToHex(buffer, name);
printf( "Result: %s\n", pbuffer );
}
return 0;
}
int convertStrToHex(char *buffer, char str[10]){
int len = strlen(str);
int i;
for( i = 0; i < len ;i++ ){
sprintf(buffer, "%X", str[i]);
buffer +=2;
};
}
谢谢您的帮助 :-)
Lynton
convertStrToHex
之前,您真的,真的应该为其指定原型。要么将定义(它本身就是原型)移动到main
之前,要么在包含文件后添加普通原型:int convertStrToHex(char*,char*);
- pmg