2012-11-12 4 views
2

죄송이 물어하지만이 작은 일을 검색하고 아래 링크를 이것에 관련된 뭔가를해야만 찾았지만 어떤 아이디어를 얻을 수 없습니다했다저장 float 값

  1. How to store floats in array to be used later?

  2. storing in unsigned char array

float 값을 저장하는 방법은 나중에 메모리 버퍼에 저장하는 데 사용되는 부호없는 char에 0.00895라고 가정합니다.

그리고 나중에 배열을 읽고 메모리에서 다시 읽고 싶습니다.

감사합니다.

+0

왜 float 값을 부호없는 char 배열에 저장해야합니까? float 값을 사용할 수 있습니다. 모든 경우에 바이트 단위로 메모리에 보관됩니다. –

+0

메모리에 데이터를 저장하는 버퍼 함수가 unsigned char로 매개 변수를 사용하기 때문에. abt float 값을 얻지 못했습니까? – user1016528

답변

3

당신은 당신이 메모리의 다른 버퍼에 float 배열을 복사한다면 그것은 도움이 될 것입니다이 ...에 대한 memcpy 필요하지 않습니다. 정말로 필요한 것은 다른 포인터 타입을 사용하여 문자 배열을 조사하는 것입니다. 당신이 원하는 모든 버퍼의 시작에 하나의 플로트를 충실했다면

const size_t BUFSIZE = 4096; 
char buffer[BUFSIZE]; 
float *f_buf = (float*)buffer; 

은 다음 두 줄 중 하나는 괜찮 :

*f_buf = 0.00895; 

f_buf[0] = 0.00895; 

정말하고있어 모든 당신이 버퍼를 참조시키는 것입니다 수레 배열.

int i; 

/* Put a bunch of floats into the buffer */ 
for(i = 0; i < 10; i++) { 
    f_buf[i] = i/2; 
} 

/* Display contents of buffer in hex */ 
for(i = 0; i < 10 * sizeof(float); i++) { 
    printf("%02x", (int)buffer[i]); 
} 
printf("\n"); 

/* Sanity-test the buffer contents */ 
for(i = 0; i < 10; i++) { 
    printf("%d: %f\n", i, f_buf[i]); 
} 
+0

네,이게 내가 찾고있는 것으로 보이지만 float 값을 unsigned char에 저장하려고합니다. – user1016528

+0

당신은'unsigned char'의 * 배열 *을 의미합니다, 맞습니까? 이 경우'char' 대신'unsigned char'을 사용하십시오. 아무런 차이가 없습니다. * single *'unsigned char'을 의미한다면 꿈꾸는 것입니다. 'float'는 4 바이트를 차지하고'char'는 하나만 차지합니다. – paddy

+0

Im이 버퍼 내용을 테스트하려고 할 때'* f_buf = 0.00895; check = 버퍼 [0]; \t \t \t \t \t \t \t sprintf (value_current, "% f", check); \t \t \t \t \t \t \t 위치 = 0x40; Lcd_move (위치); Lcd_puts (value_current); '출력은 152이지만 버퍼에는 실제로이 값인 0.00895가 포함되어 있습니까? – user1016528

2

당신은 char 버퍼에 메모리를 복사 할 수 있습니다.

float a; 
char buffer[sizeof(float)]; 
memcpy(buffer,&a,sizeof(float)); 
+0

sprintf를 사용할 수 있습니까 (value_current, "% d", 버퍼 [0]); 내 출력을 버퍼 0 요소에서 볼 수 있습니다. 버퍼의 데이터를 볼 수 있습니까? – user1016528

+0

읽기가 어려울지라도 % c 또는 % X을 선호하더라도 그렇습니다. – dzada