2012-05-01 11 views
1

なぜ私は24にapposedを与えるstrlenを取得するのか分かりませんか? THXmemcpyを使用してストリームを構築しない

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

答えて

3

@ double値の1のバイナリ表現でありますので0の場合、8バイトのうち5つがゼロであるため、41.25に達すると停止します。 doubleに変換

41.250x4044A00000000000

+0

長さを見つけるにはどうすればよいですか? – jdl

+0

@jdl私の推測は 'sizeof(double)*(j + 1)'でしょう。 – dasblinkenlight

+2

あなたがやっていることをしているなら、長さを見つけることができません、あなたはそれを追跡する必要があります。 –

2

あなたはでのmemcpy()INGのデータだとstrlenがに設定された単一のバイトを探しているので、ゼロは24バイト目

1
なり

STRLENは、それはあなたのバッファのバイト数を見つけるために、適切な関数ではありません見つけた最初のnullバイトで終了します。

2

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

あなたのやり方と同じように、データは文字列表現とまったく違うバイナリ形式です。