9年前しょうもない質問ですみません。*byte=(BYTE*)malloc(1000);ていうふうにBYTE型のメモリを動的確保したとして、その領域にデーターを書き込んだとします。short型に変換したいんですが、正しい方法を教えて下さい。short*)byte;とか、やってみたんですが、どうもデータが符号ありに書き換わっていないようです。符号ありでファイルに書き出さなければならないようなので、変換する必要が出てきたためです。どなたかわかる方、ご回答よろしくお願いします。符号なしはunsignedではないでしょうか?間違ってたら済みません。何ともお答えしようがありません。ご自分で定義された型ですか?バグのないプログラムはない。プログラムは思ったとおりには動かない。文章に一部間違いがあったので訂正しました。符号「あり」に変換したいのです。windows.hかどこかのヘッダで定義されています。short)*byte;このような変換のことを言っているのでしょうか。shortのポインタに変換しているので、データが壊れてしまうと思いますが。9年前ちょっと根本から考え直してみますので、しばらく放置しといて構いません。9年前ポインタの型変換自体は問題ないと思います。9年前そもそも確保されたメモリに8bit符合なしで記録されているのか、16bit符号無しで記録されているのか話が変わります。これが明確にして欲しい事です。それと符号付きに変換するには、1サンプリングづつ変換するしか無いのでforループで回すしか有りません。castとかそういう問題ではないと思いますよ。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。9年前>>softyaさん。私が正に気にしているところは8bit符号なしで記録されているのかが分からなくなっています。今ちょっとどう記録されているのかが分からない状態でして、色々調べています。型はLPSTRなのでchar型のポインタなんですよね。16ビットで記録するということは2バイト使ってるはずなんですが、メモリ自体はBYTE型の1バイト単位で確保しているので、その状態で記録したら符号ありなのかなしなのかどういう状態で記録されているのかが、わからないんですよね。>それと符号付きに変換するには、1サンプリングづつ変換するしか無いのでforループで回すしか有りません。castとかそういう問題ではないと思いますよ。この発言のとおり、やっぱりそうじゃないかなと思い始めてたところでした。short型で動的確保してやってみて、もしダメなら一つずつ変換していこうかと思います。9年前waveInOpenを使っているんですよね?であれば、wBitsPerSampleで指定したビット数で記録されていると思います。記録する側でバッファの型なんてのはキャストすれば良いのでLPSTRであることは8bit記録の証拠にはなりません。>メモリ自体はBYTE型の1バイト単位で確保メモリに型なんてものはありません。メモリを指しているポインタの型は、実際にメモリに書かれているデータの型を保証するものではありませんよ。short*)malloc(1000);と書いたとしても、mallocでは型を決めているわけではないですよね。malloc(1000);とサイズを指定しただけです。short*)でキャストしてますが、これはポインタの型を変えているだけでメモリの中身なんか知ったことではありません。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。9年前softyaさんありがとうございます。なんとなくメモリに型なんてないよなぁとは思っていたんですが、まだ良くわかっていませんでした。8ビットと16ビットの違いは下記の通りです。0)wBitsPerSampleを16ビットに設定して、waveInStartで録音した場合、この符号付きの値で記録できていると思っていいのでしょうか?実際16ビットにして記録すると、綺麗な音声になるので16ビットでは記録できていると思われるのですが。その記録したバッファをwaveOutWriteで再生すると問題なく綺麗な音で再生できます。そのバッファを下記のようにwaveファイルとして書き出そうとすると、コピーガードがかかったようなとても聞き取れないようなバリバリッとした音しか記録されません。8ビットに設定して記録すると、下のコードでも正しくwaveファイルは作成できます。16ビットで録音したときの、正しいwaveファイルの作成方法が分かればご回答お願いします。コード://savedataがバッファ、bufsizeがそのサイズfp=fopen(buf3,"w");fputs("RIFF",fp);//WAVE,fmt,fmtsize,data,datasize+waveformatex+波形データサイズ書き込み。9年前>>kimuchiさんいえいえ、回答いただけるだけですごい嬉しいです。何でバイナリで書き込んでるのにテキストモードにしてたのだろうか。9年前うわあwwバイナリモードにしたらいけましたwバイナリで書き込んでるのにテキストモードじゃダメですよねwまったく信じられないミスしてましたw何で気づかなかったんだろう?wテキストモードとバイナリモードは改行の扱いの違いぐらいしかないけど、16ビットの波形データの中に改行コードと同じコードが含まれていたんでしょうね。本当に何でバイナリモードにしてなかったのか、自分でも信じられない。穴があったら入りたいです。タイトルとか全然関係ないタイトルだしw恥ずかしくてしょうがないwsoftyaさん、私の完全な凡ミスに付き合せてしまったようで、本当に申し訳ございませんでした。メモリのことについてはお勉強になりました。ありがとうございました。kimuchiさん、本当に助かりました!たぶん指摘していただけなかったら、ずっと気づかなかったとおもいますw色々とググってたのがバカみたいです。視野を広く持たなきゃだめですね!皆さんご迷惑をおかけ致しまして、申し訳ございませんでした。本当にありがとうございました。9年前すいません、昨日は風邪でだうんしてました。無事解決して良かったです。気をつけるとしたら、バイナリエディタでみるとかWAVファイルの波形を可視化するツールで一度チェックしていれば気づいたかも知れませんね。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。9年前>>softyaさんそうですね。波形を見たら気づいたかもしれませんね。今後同じようなことがあったら一回波形見てみますね。ありがとうございました。ミクプラは自由にリンクできます。