1

不知道为什么我得到一个 24 相对于 40 的 strlen?谢谢

            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));
        }
4

4 回答 4

3

由于strlen寻找设置为零的单个字节,它在到达时停止41.25,因为它的八个字节中有五个为零。

41.25转换double0x4044A00000000000

于 2012-05-01T17:23:33.920 回答
2

因为您正在 memcpy() 输入数据,并且在第 24 个字节处的双精度值之一的二进制表示中存在零

于 2012-05-01T17:22:52.180 回答
2

要将二进制数据转换为字符串,您可以使用sprintf().

以您的方式进行操作,将数据保留为二进制格式,与字符串表示完全不同。

于 2012-05-01T17:25:27.683 回答
1

Strlen 在它找到的第一个空字节处终止,因此它不是查找缓冲区中字节数的合适函数。

于 2012-05-01T17:23:35.853 回答