我想写一个包含16位整数的数组作为文件的原始二进制文件,并尝试使用以下示例:
PrintWriter print = response.getWriter();
print.println("");
但是,输出包含的不仅仅是零。
# define __int8_t_defined
__intN_t (8, __QI__);
__intN_t (16, __HI__);
__intN_t (32, __SI__);
__intN_t (64, __DI__);
int main(int argc, char *argv[])
{
FILE * rawf;
rawf = fopen("./rawPcm","wb");
int16_t buff[] = {0,0,0};
fwrite(buff,sizeof(int16_t), sizeof(buff),rawf);
fwrite(buff,sizeof(int16_t), sizeof(buff),rawf);
fclose(rawf);
}
它为每$ hexdump -v rawPcm
0000000 0000 0000 0000 85fd 0804 0001 0000 0000
0000010 0000 85fd 0804 0001
0000018
写0000 0000 0000 85fd 0804 0001
,而我希望只获得fwrite(buff,sizeof(int16_t), sizeof(buff),rawf);
。
附加数据代表什么0000 0000 0000
以及如何防止它发生?
答案 0 :(得分:19)
其他数据代表
85fd 0804 0001
可能是一些随机垃圾数据。
如何防止它发生?
fwrite(buff,sizeof(int16_t), sizeof(buff),rawf);
应写成:
fwrite(buff,sizeof(int16_t), sizeof(buff) / sizeof(buff[0]),rawf);
/* ^ ^^^^^^^^^^^^^^^ */
/* size of each object Count of objects */
/* (2) (3) */
/* or */
fwrite(buff, sizeof buf[0], sizeof buff / sizeof buff[0], rawf);
sizeof buff / sizeof buff[0]
获取array length in number of objects (or members),而sizeof buff
获取数组的大小(以字节为单位)。
因此,您正在阅读buff
并将其写入文件并调用undefined behaviour。在您的情况下,您看到随机垃圾数据被写入输出文件。
在您的情况下,sizeof
中每个元素的buff
为2个字节,buff
数组有3个成员,导致总大小为6个字节。当你写fwrite(buff,sizeof(int16_t), sizeof(buff),rawf);
时,每个2字节的6个对象被写入文件,这不是你想要做的事情。
现在,您正在编写6个类型(大小)int16_t
的数据,从buff[0]
开始,即buff[0..5]
到输出。 <{1}}是预期的buff[0..2]
,0
是垃圾。
答案 1 :(得分:9)
-(NSString *)dateToFormatedDate:(NSString *)dateStr {
NSString *finalDate = @"2014-10-15";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *date = [dateFormatter dateFromString:dateStr];
[dateFormatter setDateFormat:@"EE, d MMM, YYYY"];
return [dateFormatter stringFromDate:date];
}
的第三个参数是第二个参数指定的大小元素的 number 。它不是您当前正在执行的总大小(以字节为单位)。
所以你超越了你的缓冲区。