Objective c 未使用memcpy建立流
我不知道为什么我会得到一个strlen,24等于40? thxObjective c 未使用memcpy建立流,objective-c,c,cocoa,Objective C,C,Cocoa,我不知道为什么我会得到一个strlen,24等于40? thx 因为您在内存中存储数据,并且在第24个字节的一个双值的二进制表示中有一个零,因为您在内存中存储数据,并且在第24个字节的一个双值的二进制表示中有一个零,因为strlen查找设置为零的单字节,它在达到41.25时停止,因为它的八个字节中有五个是零 41.25转换为double成为0x4044A00000000000由于strlen查找设置为零的单个字节,它在到达41.25时停止,因为它的八个字节中有五个是零 41.25转换为doubl
因为您在内存中存储数据,并且在第24个字节的一个双值的二进制表示中有一个零,因为您在内存中存储数据,并且在第24个字节的一个双值的二进制表示中有一个零,因为
strlen
查找设置为零的单字节,它在达到41.25
时停止,因为它的八个字节中有五个是零
41.25
转换为double
成为0x4044A00000000000
由于strlen
查找设置为零的单个字节,它在到达41.25
时停止,因为它的八个字节中有五个是零
41.25
转换为double
后变成0x4044A00000000000
Strlen在找到的第一个空字节处终止,因此它不是查找缓冲区中字节数的合适函数。Strlen在找到的第一个空字节处终止,因此它不是查找缓冲区中字节数的合适函数缓冲区中的字节。要将二进制数据转换为字符串,可以使用sprintf()
按照您的方式进行操作,将数据保留为二进制格式,这与字符串表示完全不同。要将二进制数据转换为字符串,可以使用
sprintf()
按照您的方式进行操作,会将数据保留为二进制格式,这与字符串表示完全不同。我应该使用什么来查找长度?@jdl我的最佳猜测是
sizeof(double)*(j+1)
。如果您正在进行操作,则无法找到长度,你需要跟踪它。我应该用什么来找到长度?@jdl我最好的猜测是sizeof(double)*(j+1)
。如果你在做你正在做的事情,你就找不到长度,你需要跟踪它。
char bufferData[1000];
memset(bufferData, '\0', 1000);
long j;
long offset;
double mice;
mice = 32.45;
j=0;
offset = sizeof(double) * j;
NSLog(@"offset: %d", offset);
memcpy(bufferData+offset, &mice, sizeof(double));
mice = 21.35;
j=1;
offset = sizeof(double) * j;
NSLog(@"offset: %d", offset);
memcpy(bufferData+offset, &mice, sizeof(double));
mice = 11.55;
j=2;
offset = sizeof(double) * j;
NSLog(@"offset: %d", offset);
memcpy(bufferData+offset, &mice, sizeof(double));
mice = 41.25;
j=3;
offset = sizeof(double) * j;
NSLog(@"offset: %d", offset);
memcpy(bufferData+offset, &mice, sizeof(double));
mice = 51.50;
j=4;
offset = sizeof(double) * j;
NSLog(@"offset: %d", offset);
memcpy(bufferData+offset, &mice, sizeof(double));
NSLog(@"sizeof(double): %d strlen(bufferData): %d", sizeof(double), strlen(bufferData));
}