PICマイコン用にCを勉強中です。
1Byte→Hex文字列変換関数を作ろうとしています。
メモリを出来るだけ使いたくないのでコンパイル後のメモリを極少なくするようにしたいと思い以下のようなコードを書きましたが、うまくいきません。
void ByteToHex(unsigned short b, char *p) {
unsigned short t;
t = b >> 4
*p = t + (t < 10 ? 0x30 : 0x41);
t = b & 0x0f;
*(p+1) = t + (t < 10 ? 0x30 : 0x41);
*(p+2) = 0;
}
(p+2):ポインタのアドレスは加減算できるんかな??
ちなみに使っているコンパイラは"mikroC"です。
No.1ベストアンサー
- 回答日時:
void ByteToHex(unsigned char b, char *p) {
int t;
t = (b >> 4) & 0x0f;
*p++ = t + (t < 10 ? 0x30 : 0x41);
t = b & 0x0f;
*p++ = t + (t < 10 ? 0x30 : 0x41);
*p = '\0';
}
No.4
- 回答日時:
#1,#2,#3の方の指摘を全て修正すれば動作するので、他の方法を紹介します。
void ByteToHex(unsigned short b, char *p)
{
static char *ch = "0123456789ABCDEF";
p[0] = ch[0x0f & b>>4];
p[1] = ch[0x0f & b];
p[2] = '\0';
}
メモリの消費量はコンパイルしてみないとわかりません。
なぜなら、
見た目が短い = メモリの消費量が少ない
ではないからでです。
複雑な演算式をごちゃごちゃ書いた方が案外大きくなります。
>> (p+2):ポインタのアドレスは加減算できるんかな??
全く問題ありません。
No.2
- 回答日時:
t = b >> 4
にセミコロンがないけど?
後、どのようにうまくいかないかを書いた方がいいです。
「(p+2):ポインタのアドレスは加減算」は可能ですが、
やらない方がいいですよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CStringからchar*への型変換に...
-
C言語にて構造体のメンバがNULL...
-
C言語のintとcharの違いってな...
-
char*を初期化したいのですが
-
小数点入りの文字列をfloat型に...
-
char 文字列型 の表現範囲が-12...
-
2次元配列の文字"列"の初期化方法
-
C言語でポインターで詰まってい...
-
new charとnew char[N]の違いは?
-
警告
-
構造体が戻り値の関数について...
-
DWORDとcharの変換
-
文字の代入とコピーについて
-
strcat関数を自作したいです
-
fstream型オブジェクトを関数の...
-
C言語のプログラムについてです
-
関数内で設定したポインタ値に...
-
動的メモリの初期化方法について。
-
char形配列の整数を抜き出したい
-
1Byte→Hex文字列変換がうまく行...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
char*を初期化したいのですが
-
C言語のintとcharの違いってな...
-
CStringからchar*への型変換に...
-
C言語にて構造体のメンバがNULL...
-
fstream型オブジェクトを関数の...
-
小数点入りの文字列をfloat型に...
-
char型にint型の数値を代入する。
-
const char* s1とただのchar s1...
-
new charとnew char[N]の違いは?
-
動的メモリの初期化方法について。
-
エクセルのMID関数は、C言語では?
-
C言語 strstrの実装
-
SetWindowTextについて。
-
char 文字列型 の表現範囲が-12...
-
文字列の途中から途中までを抽出
-
2次元配列の文字"列"の初期化方法
-
DWORDとcharの変換
-
C++17で、unsigned char * 配列...
-
C言語の文字リテラル中の16進文...
-
strcat関数を自作したいです
おすすめ情報