我想我的字節數組和字符數組的理解導致了我一些問題,這裏是我的問題:轉換字節數組/字符數組到十六進制字符串用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