はじめまして。
どうしても困っているのでヒントでも良いのでおねがいします。
関数内(func1)で確保した文字列変数のポインタを
別の関数(func2)にポインタ渡しします。
func2内で整数型で計算した結果を引数で示された文字列変数に
代入するというようなことをしたいと思ってます。
ここで、intは4byteとします。
メモリ長だけで見ると、bit[4] = tmp です。
void func1(){
char bit[4];
func2(bit);
return;
}
void func2(char* p){
int tmp = 0x10101100;
p = tmp; <---- ???
return;
}
そこでどのようにすれば、
代入することができるのか分かりません。
以下のような結果になるように代入したいと思っています。
bit[0] = 0x10;
bit[1] = 0x10;
bit[2] = 0x11;
bit[3] = 0x00;
小さな文字列型に整数型をどのように渡せばよいのかが
一番疑問に思っているところです。
整数型に文字列型を代入する場合には
文字列のバイト指定とシフト演算で実現できています。
ヒントでもよいのでお願いします。
No.1ベストアンサー
- 回答日時:
★アドバイス
>整数型に文字列型を代入する場合には
>文字列のバイト指定とシフト演算で実現できています。
↑
これと逆の操作をすれば良いのです。
サンプル:
void func2( char *p )
{
int tmp = 0x10101100;
*p++ = (char)(tmp >> 8*3); ←0xAABBCCDDの『0xAA』
*p++ = (char)(tmp >> 8*2); ←0xAABBCCDDの『0xBB』
*p++ = (char)(tmp >> 8*1); ←0xAABBCCDDの『0xCC』
*p++ = (char)(tmp >> 8*0); ←0xAABBCCDDの『0xDD』
}
No.3
- 回答日時:
★この手の処理は、unsigned char が無難です。
A,B を換えて試して下さい。
>エンディアンがからむので、少し工夫がいりそうです。
★心配無用かと・・。
#include <stdio.h>
//#define un_char char // A
#define un_char unsigned char // B
void main()
{
int tmp = 0x80706050;
un_char bit[4];
bit[0] = (un_char)( ( tmp >> 24 ) & 0xFF );
bit[1] = (un_char)( ( tmp >> 16 ) & 0xFF );
bit[2] = (un_char)( ( tmp >> 8 ) & 0xFF );
bit[3] = (un_char)( tmp & 0xFF );
printf( "%02X ", bit[0] );
printf( "%02X ", bit[1] );
printf( "%02X ", bit[2] );
printf( "%02X ", bit[3] );
printf( "\n" );
}
注:インデントに全角空白を用いています。
タブに一括変換して下さい。
エンディアンについてはバイト指定してあげているので、
ここでは何も問題ないということですね。
2回も回答いただき大変勉強になりました。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
char*を初期化したいのですが
-
char型にint型の数値を代入する。
-
C言語のintとcharの違いってな...
-
CStringからchar*への型変換に...
-
C言語で文字列をかえす正しい書...
-
文字型配列に格納した空白の切捨て
-
const char* s1とただのchar s1...
-
c言語でポインタ変数を用いた配...
-
ポインタを使って回文かどうか...
-
[C] 構造体メンバーのカンマ区...
-
文字列の比較
-
動的メモリの初期化方法について。
-
エクセルのMID関数は、C言語では?
-
C++17で、unsigned char * 配列...
-
char 文字列型 の表現範囲が-12...
-
C言語のchar型配列を計算させる...
-
レコード件数、レコード長の分...
-
ポインタ
-
C言語にて構造体のメンバがNULL...
-
VBからCで作成されたDLL...
マンスリーランキングこのカテゴリの人気マンスリー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関数を自作したいです
おすすめ情報