![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.6ベストアンサー
- 回答日時:
>任意の桁数で区切る事と、
strncpy()を使ってください。n文字ずつで切り出すなら、
char buf1[n+1];
strncpy(buf1, str+i*n, n);
buf1[n]='\0';
>その下○桁を残す方法が分かりません。
右からm桁残すならstrcpy()で
char buf2[m+1];
strcpy(buf2, buf1+strlen(buf1)-m);
こんな感じでいかがでしょうか。
回答ありがとうございました。
返事が遅くなってしまい申し訳ありません。
区切り方と残し方の二つの方法よくわかりました。
ありがとうございます^^
No.5
- 回答日時:
何をやりたいのかわかりにくいですね。
もう少し整理してください。・はじめの条件は何ですか?
「a[]="10101",b[]="11011",c[]="10001"という文字があり」 ですか
「長い文字"101000111000110101100110011001100"があったときに」ですか?
桁数に制限はないのですか?
・「ある長さで区切り」というのは
どんな長さでも対応できるようにということですか?
それは、左右どちらから区切りますか?
・「下4桁を残し」は固定でしいのですか?
・「最後はこれを3D66といった16進表示にする」ということは
整数型の数値は必要ではなく、16進形式の文字に変換すればいいのですか?
で、結局どこがわからないのですか?
・任意の桁数に区切る方法?
・文字を連結する方法?
・0,1の文字列を16進の文字列に変換する方法?
回答ありがとうございます。すいません説明不足です。
自分が今やっていることは、シュミレーション結果を16進の文字で表示させようとしています。
シュミレーションでの結果は8個出てきます。その8個の結果を一列にして一つの物とみなします。
シュミレーション結果の雑音と思われる部分を取り除き残りを繋げて、一つの結果を出そうとしています。
1.はじめの条件は8個です。
シュミレーション結果は時間単位で区切るので、桁数に制限はありません。
2.桁数を区切るのには、どんな長さにも対応できる物を作りたいです。左から区切ろうと思います。
3.残すものは固定です。8桁で区切った時の下4桁は固定です。
4.数値は16進形式の文字だけでかまいません。
今分からない事は
任意の桁数で区切る事と、その下○桁を残す方法が分かりません。
色々なパターンで実験したいと思っています。
8bitずつに区切った時は4bit残す、2bitにした時は1bit残すって感じに色々なパターンを試したいと考えています、どの長さにも対応できるものにしたいです。
No.4
- 回答日時:
#1 は C で書きました。
> char buf[256]でa,b,cを並べた状態を作ったって事でしょうか?
> この時の[256]は256文字まで取り込めるということですよね?
そうです。終端文字も含めて256文字です。
> a+1はどういう意味なのでしょうか?
a はポインタで,"10101" の先頭を指しています。
a + 1 とすると,ポインタが1文字分進んで,"0101" の先頭を指すことになります。
> やりたい事は長い文字列があった時に
> 101000111000110101100110011001100
ここでいう,1 とか 0 というのが 1 文字を表していると考えてよいのでしょうか?
つまり,
char s[] = "101000111000110101100110011001100";
ということですか?
回答ありがとうございます。説明不足すいませんm(__)m
>ここでいう,1とか0というのが1文字を表していると考えてよいのでしょうか?
はいそうです、1や0は1文字を表しています。
No.3
- 回答日時:
なぜ素直に8bitでやらないのでしょうか?これがどうしてビット演算なのかよく分かりません。
char に入れて上位4bitを0x0fでマスクすれば1ニブル分だけ
になるので2個のcharデータを持ってきて
char A,B(なにかいれておく)
char C=(A&0x0f<<4)|B;とかするのはだめですか?
こういうことがしたいのではない?
文字がたくさんあってやり方が分からないのであれば
一文字ずつまずは読んできてやればいいと思います。順番に進んでいく方がいいと思います。具体的にやりたいことを書いてあれば別の事もかんがえられますけど。
回答ありがとうございます。
もしかしてビット演算じゃないかもしれません^^;
一文字ずつ読んで次々に繋いでいくのはいいかもしれませんね。
やりたい事は長い文字列があった時に
101000111000110101100110011001100
ある長さで区切り(ここは何バイトでもかまいません)
10100011 10001101 01100110 01100110 0
下4桁を残し
0011 1101 0110 0110
残った数字をつなげてひとつの文字列にしたいです。
0011 ← 1101 ← 0110 ← 0110
つなげた結果
0011110101100110
下4桁を残したいのは、データを16進数で扱いたいから4桁残したいと思いました。
0011110101100110
最後はこれを
3D66といった16進表示にするって物を作りたいです。
No.1
- 回答日時:
ビット演算というより文字列処理の話でしょうか?
a, b, c はもともと5桁ごとになっているようですが,わざわざくっつけてから,再び5桁ごとに分ける必要があるのでしょうか?
#include <stdio.h>
int main(int argc, char* argv[])
{
const char *a = "10101";
const char *b = "11011";
const char *c = "10001";
char buf[256];
sprintf(buf, "%s%s%s", a+1, b+1, c+1);
puts(buf);
return 0;
}
こんなのじゃだめでしょうか?
回答ありがとうございます。これはC++ですよね?
今自分が作っているのはCの方だったんですよ^^;
すいません、説明不足でした。
自分が作ろうとしていたのは1と0の長い文字列をある間隔ごとに区切って、その下4桁を取り出せるプログラムを作ろうと思い今回のような質問をさせていただきました。
そこでa,b,cの数字はもっと大きな数字を使用しようと思うのですが何桁になるか、わからなっかったので、まずは簡単な物を作ってから色々試していこうと思いました。
char buf[256]でa,b,cを並べた状態を作ったって事でしょうか? この時の[256]は256文字まで取り込めるということですよね?
実際の数字は数千桁にしたいのですがchar buf[4000]としたら4000桁まで取り込めるということなのでしょうか?
5bit単位に区切って下4桁を取り出した部分っていうのはここの部分になるのでしょうか?
>sprintf(buf, "%s%s%s", a+1, b+1, c+1);
a+1はどういう意味なのでしょうか?5bit取り出して1を足したので全部が一桁繰り上がり1bit分シフトさせたという事ですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- スピーカー・コンポ・ステレオ DAC[について・・・ 1 2022/08/29 11:44
- その他(プログラミング・Web制作) Visual Studio Code 関数の使い方について 3 2023/05/31 13:15
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- C言語・C++・C# 数字の単位 何故10m>0.003なのかわかりません 数字の単位で何故10mより0.003の方が小さ 2 2023/03/06 00:20
- Visual Basic(VBA) VBAでArrayListを使う為の「mscorlib.tlb」の参照設定について 3 2022/03/23 19:45
- 英語 A healthy 20 centimeters tall の a がなぜ定冠詞でないのでしょうか? 2 2022/10/22 04:40
- HTML・CSS CSS上での計算を行うためのルールについて教えてください。 3 2022/08/15 14:43
- 英語 A healthy 20 centimeters tall の a がなぜ定冠詞でないのでしょうか? 2 2022/10/14 05:21
- Excel(エクセル) [並べ替えの前に]、[選択範囲を拡張する]のが煩わしいッ! 1 2023/02/28 22:40
- 英語 英文和訳についての質問です。 2 2023/06/23 06:38
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
char*を初期化したいのですが
-
CStringからchar*への型変換に...
-
strcat関数を自作したいです
-
C言語にて構造体のメンバがNULL...
-
2次元配列をポインタで参照した...
-
csvファイルをfscanfで読み込む...
-
char 文字列型 の表現範囲が-12...
-
strcpy関数で文字型変数へのポ...
-
char型にint型の数値を代入する。
-
new charとnew char[N]の違いは?
-
char AA[]{"全角文字"};から"全...
-
fstream型オブジェクトを関数の...
-
SubStringの使い方について
-
C言語を用いた環境変数の作成/...
-
C言語(C89)での文字列代入
-
文字列strの中から文字cを探す...
-
fgetc( )の戻り値はなぜ整数??
-
小数点入りの文字列をfloat型に...
-
C言語のmemcpy関数について質問...
-
C言語のプログラムについてです
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のintとcharの違いってな...
-
char*を初期化したいのですが
-
C言語にて構造体のメンバがNULL...
-
CStringからchar*への型変換に...
-
strcat関数を自作したいです
-
new charとnew char[N]の違いは?
-
csvファイルをfscanfで読み込む...
-
char型にint型の数値を代入する。
-
動的メモリの初期化方法について。
-
C言語で文字列をかえす正しい書...
-
文字列str内の全ての数字を...
-
char 文字列型 の表現範囲が-12...
-
DWORDとcharの変換
-
fstream型オブジェクトを関数の...
-
小数点入りの文字列をfloat型に...
-
C言語のプログラムについてです
-
const char* s1とただのchar s1...
-
文字列内の数字削除
-
c言語でポインタ変数を用いた配...
-
szとlpszの違い
おすすめ情報