我想我的字节数组和字符数组的理解导致了我一些问题,这里是我的问题:转换字节数组/字符数组到十六进制字符串用C
我有拉从WebSphere MQ和消息应用程序将它们发送到目标系统。
MQ消息具有表示消息的MSGID的MQBYTE24(基本上是字节数组24)。我的目标是将其转换为十六进制字符串。
在队列中的在我的Linux框消息1的WMQ探险有“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资源管理器显示,任何IDE略有不同我在这里做错了什么?
我想这是我从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;
};
}
感谢您的帮助:-)
林顿
是那里的转义序列? C sprintf如何处理它们?另外,为什么char * pbuffer = buffer?只需在printf中使用'buffer'... –
@AaronGage:它们是八进制字符。 –
你真的应该在调用之前为'convertStrToHex'指定一个原型。将定义(它本身就是一个原型)移动到'main'之前或者在包含之后添加纯原型:'int convertStrToHex(char *,char *);' – pmg