![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.2ベストアンサー
- 回答日時:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *s = "4f4b57415645";
char x[3];
int i, c;
for(i = 0; i < 12; i += 2){
sscanf(&s[i], "%2s", x);
putchar(strtol(x, NULL, 16));
}
putchar('\n');
for(i = 0; i < 12; i += 2){
sscanf(&s[i], "%2x", &c);
putchar(c);
}
return 0;
}
No.3
- 回答日時:
私もNo.1の方の方法に概ね一緒ですね。
重い標準ライブラリ(文字列処理系)も使う必要も無いので軽量です。片手間に書いたので汚いですが、参考になりますでしょうか。#include <cstdio>
int getIntFromChar(const char c)
{
if(c >= '0' && c <= '9')
{
return (int)c - (int)'0';
}
else if(c >= 'A' && c <= 'F')
{
return 10 + (int)c - (int)'A';
}
else if(c >= 'a' && c <= 'f')
{
return 10 + (int)c - (int)'a';
}
return 0; // error (not hex char)
}
int main(int argc, char** argv)
{
char str[] = "4f4b57415645";
// 文字列の長さチェック(strlenを敢えて使わない)
int lengthOfStr = 0;
while( true )
{
if(str[lengthOfStr] == '\0')
{
break;
}
lengthOfStr++;
}
char *outStr = new char[lengthOfStr / 2 + 1];
for(int i = 0; i < lengthOfStr; i += 2)
{
char c = (::getIntFromChar(str[i]) * 16) + ::getIntFromChar(str[i + 1]);
*(outStr + (i / 2)) = c;
printf("%d, %c\n", i, c);
}
*(outStr + lengthOfStr / 2) = '\0';// 終端
printf("%s\n", outStr);
delete outStr;
return 1;
}
No.1
- 回答日時:
0~9とa~fで計算の仕方を変えればいいだけだと思いますよ。
ASCIIの0~9は0x0fでandをとるのが一般的な変換方法と思いますが、
a~fでは0x37をマイナスするとか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl perlのプログラミング 部分入れ替えの方法 1 2022/10/11 22:26
- フリーソフト フォルダ、ファイル名の一括変換について 3 2023/03/16 09:23
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PDF いきなりPDFで文書の切り取り 3 2022/10/29 13:25
- その他(メールソフト・メールサービス) メールソフトを教えてください 1 2023/03/28 23:32
- HTML・CSS HTMLを正しく表示させるには 2 2023/06/18 09:12
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) Excelのセル上の日付の不具合 3 2022/05/22 18:20
- フリーソフト Windowsの特殊文字を削除や変換したい そんなフリーソフトはありますか? 3 2022/11/09 00:05
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数字文字の出現回数を表示する...
-
16進数関数のhex関数について
-
c++ 文字列を入力して、一文字...
-
fgetsなどのときのstdinのバッ...
-
3桁区切(コンマ)記号をつけ...
-
文字列から空白を取り除きたい...
-
c言語でユーザ関数を利用して入...
-
C言語です
-
int型からchar型への変換
-
C言語プログラミングについて(...
-
【至急】C言語の問題です、どな...
-
ncursesで...
-
文字列がNULLか空文字列かの判定
-
object型からchar型へ変換の方法
-
VB6のAscB関数をC++で書き換えたい
-
標準ライブラリ関数の自作につ...
-
16進表記から文字に変換
-
C言語です。コレを使ってなにか...
-
配列から指定するデータを取り...
-
scanf()について教えてください
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
C言語のfor文です。 繰り返しの...
-
charでの計算?
-
テキストデータをそのままバイ...
-
文字列から空白を取り除きたい...
-
charからLPTSTRへの変換方法
-
atoi( ) の反対をやりたい
-
2曲同時再生するにはどうした...
-
C言語の入力した文字を反転させ...
-
配列をnビットシフトする
-
3桁区切(コンマ)記号をつけ...
-
int main()の・・・
-
型変換
-
CStringをwchar_tに変換したい
-
'const char *' 型は 'char *' ...
-
間接操作のレベルとは
-
double型の値をchar配列に変換...
-
c++ 文字列を入力して、一文字...
-
絶対パスからのファイル名の切...
-
switch文で文字を比較すること...
おすすめ情報