C 在 运行 时间选择变量类型
C choosing variable type at run-time
我有下面这段代码,看起来非常明确和冗余,有没有办法在运行时选择变量类型?
if(header->bitsPerSample == 16) {
int sample;
for (int i = 0; i < header->chunkSize - HEADER_SIZE + 8; i += sizeof(sample) * 2) {
fread(&sample, sizeof(sample), 1, fp);
fwrite(&sample, sizeof(sample), 1, new);
fread(&sample, sizeof(sample), 1, fp);
}
} else if(header->bitsPerSample == 8) {
char sample;
for (int i = 0; i < header->chunkSize - HEADER_SIZE + 8; i += sizeof(sample) * 2) {
fread(&sample, sizeof(sample), 1, fp);
fwrite(&sample, sizeof(sample), 1, new);
fread(&sample, sizeof(sample), 1, fp);
}
}
我正在寻找这样的东西:
if(header->bitsPerSample == 16)
sample is of type int
else if(header->bitsPerSample == 8)
sample is of type char
for (int i = 0; i < header->chunkSize - HEADER_SIZE + 8; i += sizeof(sample) * 2) {
fread(&sample, sizeof(sample), 1, fp);
fwrite(&sample, sizeof(sample), 1, new);
fread(&sample, sizeof(sample), 1, fp);
}
你不能这样做,我建议你使用相同的变量类型,例如你可以将一个 int 转换为 char,你将得到正确的值
C 编写泛型代码的唯一工具是使用宏,但这里没有必要。
跳过声明类型正确的变量的手续,而只是读取或写入适当数量的字节:
size_t raw_size = header->bitsPerSample / 8;
unsigned char buffer[raw_size];
void* raw = &buffer;
for (int i = 0; i < header->chunkSize - HEADER_SIZE + 8; i += raw_size * 2) {
fread(raw, raw_size, 1, fp);
fwrite(raw, raw_size, 1, new);
fread(raw, raw_size, 1, fp);
}
由于您的代码并不关心这些值是什么,只关心它们需要多少字节,您可以只使用字符缓冲区。
我有下面这段代码,看起来非常明确和冗余,有没有办法在运行时选择变量类型?
if(header->bitsPerSample == 16) {
int sample;
for (int i = 0; i < header->chunkSize - HEADER_SIZE + 8; i += sizeof(sample) * 2) {
fread(&sample, sizeof(sample), 1, fp);
fwrite(&sample, sizeof(sample), 1, new);
fread(&sample, sizeof(sample), 1, fp);
}
} else if(header->bitsPerSample == 8) {
char sample;
for (int i = 0; i < header->chunkSize - HEADER_SIZE + 8; i += sizeof(sample) * 2) {
fread(&sample, sizeof(sample), 1, fp);
fwrite(&sample, sizeof(sample), 1, new);
fread(&sample, sizeof(sample), 1, fp);
}
}
我正在寻找这样的东西:
if(header->bitsPerSample == 16)
sample is of type int
else if(header->bitsPerSample == 8)
sample is of type char
for (int i = 0; i < header->chunkSize - HEADER_SIZE + 8; i += sizeof(sample) * 2) {
fread(&sample, sizeof(sample), 1, fp);
fwrite(&sample, sizeof(sample), 1, new);
fread(&sample, sizeof(sample), 1, fp);
}
你不能这样做,我建议你使用相同的变量类型,例如你可以将一个 int 转换为 char,你将得到正确的值
C 编写泛型代码的唯一工具是使用宏,但这里没有必要。
跳过声明类型正确的变量的手续,而只是读取或写入适当数量的字节:
size_t raw_size = header->bitsPerSample / 8;
unsigned char buffer[raw_size];
void* raw = &buffer;
for (int i = 0; i < header->chunkSize - HEADER_SIZE + 8; i += raw_size * 2) {
fread(raw, raw_size, 1, fp);
fwrite(raw, raw_size, 1, new);
fread(raw, raw_size, 1, fp);
}
由于您的代码并不关心这些值是什么,只关心它们需要多少字节,您可以只使用字符缓冲区。