C/C++関連のメモ
intやfloatを1byteごとに分割してchar配列に代入
参考
http://www.geocities.jp/neo_ku_ron/HP_NEW/PGTip/UN_BitTypeConvert/UN_BitTypeConvert.html
http://www.host.or.jp/cgi-win/webboard/wb_cont.exe?programing+g+10391+NAME
整数型はビットをシフトしてキャストすれば変換できたが、浮動小数点型はできませんでした。ということで下のやりかた。
ビットシフト
int n=10; char c[4]; // intをcharに分解 c[0] = n; c[1] = n>>8; c[2] = n>>16; c[3] = n>>24; // 参考ページではunsigned charでキャストしてるがHEXで分解するので必要ないと思われる。溢れるんだろうか?と思って実行したけどmbedのオンラインコンパイラでは溢れなかった。 //charをintに結合 //こっちも上と同じ理由でキャスト外してる。 int readN=( (c[0]) | (c[1]<<8) | (c[2]<<16) | (c[3]<<24) );
union(共用体)
union UNI_TEST_T{ float a; char b[4]; } test; test.a=123.456; //上記でtest.bからchar配列としてaにアクセスできる
ポインターのキャスト
float a; char* b; b=(char*)&a; //で、aに値を代入すればb[]でアクセスできる
配列へのポインタ
http://enakai00.hatenablog.com/entry/20110808/1312783316
char (*ptr)[10]; //char[10]配列へのポインタ char *ptr[10]; //charポインタの配列
配列へのポインターを使って中の要素にアクセスする
char buf[10][2]; char (*ptr)[10]; ptr=buf; (*ptr)[1]=0; //これでbuf[0][1]へ0を代入できる。 (*ptr[0])[1]=0; // これは上記と同義 *ptr[1]=0; //これだとbuf[1][0]へ0を代入することになる。ややこしい
アドレスをprintfる
int a=10; printf("アドレスは%pです\n", &a);
配列へのポインタを関数に渡す
参考
http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/prog1/11-03.html
// 引数に配列へのポインタをとる関数 void func(char *buf) { //buf[]で普通にアクセスできる } int main() { char buf[4]; func(buf); }
Please log in to post comments.