流不使用memcpy构建

时间:2012-05-01 17:19:22

标签: objective-c c cocoa

不知道为什么我得到一个让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));
        }

4 个答案:

答案 0 :(得分:3)

由于strlen查找设置为零的单个字节,因此当它到达41.25时会停止,因为其八个字节中有五个为零。

转换为41.25

double变为0x4044A00000000000

答案 1 :(得分:2)

因为你是memcpy()数据并且你的二进制表示中有一个零值@第24个字节

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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