1

40ではなく24を与える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ゼロに設定された1バイトを探すため、8バイトのうち5バイトがゼロであるため、に達すると停止します41.25

41.25に変換されdoubleます0x4044A00000000000

于 2012-05-01T17:23:33.920 に答える
2

バイナリデータを文字列に変換するには、を使用できますsprintf()

それをあなたのやり方で行うと、データは文字列表現とはまったく異なるバイナリ形式のままになります。

于 2012-05-01T17:25:27.683 に答える
2

memcpy()でデータを入力していて、24バイト目のdouble値の1つのバイナリ表現にゼロがあるためです。

于 2012-05-01T17:22:52.180 に答える
1

Strlenは、検出した最初のnullバイトで終了するため、バッファ内のバイト数を検出するのは適切な関数ではありません。

于 2012-05-01T17:23:35.853 に答える