不知道为什么我得到一个让24与40相关的strlen? THX
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));
}
答案 0 :(得分:3)
由于strlen
查找设置为零的单个字节,因此当它到达41.25
时会停止,因为其八个字节中有五个为零。
41.25
的 double
变为0x4044A00000000000
答案 1 :(得分:2)
因为你是memcpy()数据并且你的二进制表示中有一个零值@第24个字节
答案 2 :(得分:2)
要将二进制数据转换为字符串,您可以使用sprintf()
。
按照您的方式进行操作,将数据保留为二进制格式,与字符串表示完全不同。
答案 3 :(得分:1)
Strlen在找到的第一个空字节处终止,因此找不到缓冲区中的字节数是不合适的函数。