2012-03-25 6 views
0

の店舗の六角同等:私はchar型の六角を保存したいHow to convert from ASCII to Hex and vice versa?C質問に2つ目の答えを参照文字

[3]異なる文字の同等は、次のように:

char *str ="abcd"; 

// I want to get hex[3] of each character in above string and save into the following: 

char str2[4]; // should contain hex values as : \x61 for a,\x62 for b,\x63 for c,\x64 for d 

私はこれを行うことができますどのように?

int i; 
char ch; 
char hex[3]; 
for(i=0; i<strlen(str);i++) { 
    ch = charToHex(*(str+i), hex); 
    // now hex contains the first and second hex characters in hex[0] & hex[1] 
    // I need to save them in the first index of str2 
    // e.g. if hex[0] = 7 and hex[1] = f, then str2[0] should be "\x7f" 

    // -> how do I do this part ? 

} 

ありがとう:

は、私がこれまでのところ、次の試してみました。

+7

これは、私のコードを書くサイトではありません。何を試しましたか?あなたはどこにいるのですか?また、文字列 '' \\ x61 "'はヌルターミネータのために 'char [4]'に収まりません。 (あなたが望むならヌルターミネーターなしで作業できるので、おそらく "おそらく"と言いますが、あなたが意図したものではないと思っています。) –

+1

答えは固定された順序で表示されません。 upvotesとdownvotes - だから "二番目の答え"は、あなたが何を参照しているの有用な説明ではありません。なぜあなたは念頭に置いている答えに直接リンクしないのですか?そのリンクの下にある「リンク」リンクを使用してください。 – ruakh

+0

@MarceloCantos更新された質問をご覧ください – Jake

答えて

1

for loopを使用すると、文字列のすべての文字を繰り返し処理し、各文字に変換を適用できます。 Cの文字列はnull-terminatedです。

はまた、あなたが\x61\x62\x63\x64を保存したい場合は4つの文字が十分ではないことに注意してください - あなたは4 * strlen(str) + 1をする必要があります、コードに応答して、すなわち17


あなたはしないでください実際にはchが必要です。 function charToHex返品void、つまり何も返されません。

は、単純に次のように、出力文字列に文字をコピーします。

str2[2*i] = hex[0]; 
str2[2*i+1] = hex[1]; 

ここでも、結果の文字列にヌルターミネータを設定することを忘れないでください。

また、各繰り返しでstrlenを呼び出すので、Schlemiel the Painter algorithmと書いてあります。

+0

私はあなたの解決策を試しました。最後に、printf( "%s"、str2)を使ってstr2を印刷すると、61626364が出力されます。 今質問しました:char * str3 = "\ x61 \ x62 \ x63 \ x64"目的はstr1形式からstr3形式に変換されるため、これは結果と同じです。 – Jake

+0

もう1つの '\ x'が必要な場合は、4番目の文字を' '\\' 'に、4番目の文字(2番目以降の文字)を' 'x ''に設定するだけです。コードは同じままです。 '2 * i'を' 4 * i'に置き換えてください。 – phihag

+0

サイズに変更はありますか? – Jake

関連する問題