900 :
RA・イール:01/12/25 11:32
僭越ながら質問させてください。
UTFビット列をUnicodeビット列に変更するプログラムを
作成しているのですが。
どのようにマスクを掛けたり、ビットをずらしたりすれば
良いのか思い浮かびません。
どなたかご教授願えませんでしょうか。
UTFビット列 Unicodeビット列
1バイトコード 0aaa bbbb 0000 0000 0aaa bbbb
2バイトコード 110a aabb 10bbc ccc 0000 0aaa bbbb cccc
3バイトコード 1110 aaaa 10bb bbcc 10cc dddd aaaa bbbb cccc dddd
>僭越ながら質問させてください。
興味深い日本語だ。
1バイトかどうか (c1 & 0x80) == 0
2バイトかどうか (c1 & 0xe0) == 0xc0
3バイトかどうか (c1 & 0xf0) == 0xe0
4バイトかどうか (c1 & 0xf8) == 0xf0
5バイトかどうか (c1 & 0xfc) == 0xf8
6バイトかどうか (c1 & 0xfe) == 0xfc
2バイトのとき (c1 & 0x1f) << 6 | (c2 & 0x3f)
3バイトのとき (c1 & 0x0f) << 12 | (c2 & 0x3f) << 6 | (c3 & 0x3f)
4バイトのとき (c1 & 0x07) << 18 | (c2 & 0x3f) << 12 | (c3 & 0x3f) << 6 | (c4 & 0x3f)
5バイトのとき (c1 & 0x03) << 24 | (c2 & 0x3f) << 18 | (c3 & 0x3f) << 12 | (c4 & 0x3f) << 6 | (c5 & 0x3f)
6バイトのとき (c1 & 0x01) << 30 | (c2 & 0x3f) << 24 | (c3 & 0x3f) << 18 | (c4 & 0x3f) << 12 | (c5 & 0x3f) << 6 | (c6 & 0x3f)
903 :
RA・イール:01/12/25 13:25
>>901さん
変な日本語になってますね。
僭越の意味が「身分や権限などを越えて、差し出がましいことをする」
だからこの場合おかしな表現でした。「不躾」であっていますかね?
>>902さん
私宛ての解答ですよね?
ありがとうございます。
これを参考に頑張ってみます。
904 :
デフォルトの名無しさん:01/12/25 13:46
typedefしたものを使わずに関数をキャストするにはどうやりますか。
void foo(int, char *);
int (*bar)(long *, ...) = (int (*)(long *, ...))foo;
In article
>>903, RA・イール/903 wrote:
>
>>901さん
> 変な日本語になってますね。
> 僭越の意味が「身分や権限などを越えて、差し出がましいことをする」
> だからこの場合おかしな表現でした。「不躾」であっていますかね?
っていうか、余計な前置きしている暇があるなら、さっさとわかりやすく質問
すればいいのでは?
908 :
RA・イール:01/12/25 14:03
>>906 こういうところって前置きいらないですか?
909 :
デフォルトの名無しさん:01/12/25 14:05
マクロを可変引数に対応させたい場合はどうやったらいいですか?
#define macro(s,...) printf(s,...)
?
>>909 #define macro printf
In article
>>908, RA・イール/908 wrote:
> こういうところって前置きいらないですか?
しちゃだめです。
>>909 gccの独自拡張なら
#define macro(format, args...) \
printf (format , ## args)
C99なら……、知らん。
913 :
デフォルトの名無しさん:01/12/25 14:16
>>910 ごめんなさい、説明不足でした。
デバッグ出力のために使うのでシンボルDEBUGが定義されていない場合
コードを消したいんです。
#ifdef DEBUG
#define macro(str) puts(str)
#else
#define macro(str)
#endif
のような感じで…
>>913ならこうじゃん
#ifdef DEBUG
#define macro printf
#else
#define macro
#endif
>>913 #ifdef DEBUG
#define macro printf
#else
#define macro 1?(void)0:printf
#endif
あ、そか、だめだ。
>>912 > C99なら……、知らん。
#define macro(format, ...) \
printf(format, __VA_ARGS__)
918 :
RA・イール:01/12/25 14:32
919 :
デフォルトの名無しさん:01/12/25 14:51
皆さん素晴らしいレスをありがとうございました。
おかげでとても面白いスレッドになりました。
最優秀スレッド賞をひろゆきからいただきました。
単行本にも掲載されるそうです。
皆さん楽しみにしていてください。
ではごきげんよう。
え、C99対応のコンパイラ使ってんの? 何?
正直、レベルが低くてがっかりだ。
またクソスレ立ててやるからしっかり煽ってくれよ。
>>908 全然かまわないよ−。偽日下部なんか無視して、
どんどん前置き書いて−。
だからといって時候の挨拶から入るなよ。
925 :
デフォルトの名無しさん:01/12/26 21:43
Cで終了コードを取得するにはどうすればよいでしょうか?
以下のようなコードをためしたのですが:
geho.c:
int main(void)
{
exit(2);
}
hoge.c:
int main(void)
{
int ret;
ret = system("./geho");
printf("%d\n", ret);
return 0;
}
しかし、出力は2とはならずに、512となってしまいます。
>>925 OS が何かは知らないけど、上位 8bit は確かに 2 だ。
927 :
デフォルトの名無しさん:01/12/26 23:59
ret=system(...)/256 とすべきでわ?
厳密にはスレ違いだが。
wait()システムコールで得られる値には、
下位8ビットにcore dumpしたかのフラグとシグナルの値が入ってる。
子プロセスがexit()に渡した値は上位8ビットだけ。
929 :
デフォルトの名無しさん :01/12/27 18:25
struct age *sage = (struct age *)malloc(10 * sizeof(struct age));
で動的に割り当てた構造体の記憶領域の解放のしかたは
free((struct age *)sage);
であってる?
freeの中でキャストいるんだっけ?
free(sage)でいいんじゃないの?
つーかmalloc()もキャストはいらん。
void*からの代入はOKだし、void*をサポートしてない処理系がエラーや警告を
出すとも思えん。
ただし、当然#include <stdlib.h>はしてるものとする。
次元配列の宣言は、「実際には配列の配列」って言ってるけど、
ほんとの次元配列ってのはどういうものか教えてください。
次元配列ってなんだよ。
SF板かアニメ板のルパンスレにでも逝け。
また、つまらぬレスをつけてしまった・・・
935 :
デフォルトの名無しさん:01/12/28 02:41
ヘッダファイル内にはそのヘッダが依存するヘッダの
インクルードも書いておくべきだ!
それぞれのヘッダには二重定義防止マクロを記述しておけばよい。
この考え方に賛成の人〜!
ふつうそうなってないか?
それが常識なら文句ないっす。
In article
>>937, sage/937 wrote:
> それが常識なら文句ないっす。
っていうか、まず自分で確かめろって。
鬱陶しいね〜 このオヤジ
早く死ねよ〜〜
>939
off会で殺せよ
CのソースからPealのソースを呼び出すにはどーすればいいの?コンパイル時にリンクさせるには・・・・。それとも直接ファイル指定での呼び出しが可能?シェルじゃないしそれはムリかな?だれか教えて。
944 :
デフォルトの名無しさん:02/01/26 20:19
>>943 system("〜.pl")が最も簡単な手。
>>943 Perl5でCとの親和性が高くなったらしいから調べてみては?