|
>データは16ビット16KHzです。したがい、データはshortです。
>freadは2バイトずつ、標準入力から読むようにする。
標本化定理?やら周波数のことは物見には全然わかりません。
ですので、shortというところにだけレスします。
>プログラムの
> #define MAX_LEN 16
>
> unsigned short int ar[MAX_LEN];
> size_t len;
>
>の部分と
>
>while (0 < (len = fread(ar, sizeof(char), MAX_LEN, fp))) {
> int i;
> for (i = 0; i < len; i++)
> printf("%02x ", ar[i]);
> puts("");
> }
>
>の部分を書き換えればできると思うのですが? 正解(←みのもんた@ミリオネア風に)。
>実際どういったプログラムでどういった動作をするのかわかりません。
>できればまた教えていただいきたいです。m(__)m
実は物見が書いたソースには誤記があって
そのせいでパンチさんを混乱させてしまったかもしれません。
ゴメンなさい。
で。修正も含めてソースを・・・その前に。
uname(1)を使って動作環境のCPUを確認してみてください。
$ uname -p
sparc
$
で。"sparc"と出ればOKです。
x86やらIA32やらPentiumやらが出れば(←物見は見たことがない)
ソースは正しく動かないです。はい。
#『えんでぃあん』というヤツです。
#あるいはこの課題?を作成した人に
#「えんでぃあんは問題になりませんか?」とか聞いてみてください。
では・・・お待たせしました。ソースです。#include <stdio.h>
#define MAX_LEN 8
typedef unsigned short my_t;
int
main(int argc, char *argv[])
{
int ret = 1;
FILE *fp = stdin;
my_t ar[MAX_LEN];
size_t len;
switch (argc) {
case 2:
fp = fopen(argv[1], "rb");
if (fp == NULL)
goto end;
case 1:
break;
default:
goto end;
}
while (0 < (len = fread(ar, sizeof ar[0], MAX_LEN, fp))) {
int i;
for (i = 0; i < len; i++)
printf("%04x ", ar[i]);
puts("");
}
fclose(fp);
ret = 0;
end:
return ret;
}
・・・殆ど前のソースと変わってませんね。
あと。Solarisを使っているのであれば
man 3s freadとかすれば標準関数の使い方を
教えてくれます。
詳しくはman manして読んでください。ではでは。
|