2012-05-01 85 views
1

不確定爲什麼我會得到一個strlen,可以將24分配爲40? THX不使用memcpy構建流

  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

由於strlen查找設置爲單個字節之一的二進制表示有一個零零時,它在達到41.25時停止,因爲其八個字節中的五個是零。

41.25轉換爲double成爲0x4044A00000000000

+0

我應該用什麼來找到長度? – jdl

+0

@jdl我最好的猜測是'sizeof(double)*(j + 1)'。 – dasblinkenlight

+2

如果你正在做你正在做的事情,你不能找到長度,你需要跟蹤它。 –

2

因爲你的memcpy()在ING的數據,並在雙重價值@ 24號字節

1

strlen的終止在第一個空字節找到,所以它不是適當的功能找到你的緩衝區的字節數。

2

要將二進制數據轉換爲字符串,您可以使用sprintf()

這樣做,將數據保存爲二進制格式,與字符串表示完全不同。