제목을 잘 못 짓겠네요

어떤 함수가 있는데

argument가 uint32_t 였심

그런데 문제가 이 함수랑 연동해서 사용해야하는 read나 write는 byte단위로 움직임

 

uint32_t는 4byte인데 read/write는 1byte씩 사용하는 함수니 뭔가를 해야함

 

#include <stdint.h>

uint32_t u32;

uint8_t chr[2]={'a', 'c'};

memset(u32, 0, sizeof(u32));

strncpy(u32, chr, 2);

이런식으로 무식하게 사용해볼까 라고 생각도 했지만

strncpy가 그 넓고 넓은 uint32_t의 어디에 복사해 넣을지를 몰라서 못 사용함

 

여튼...

 

 

32bit data type 의 pointer를 가지고 8bit data type만큼 돌아댕길 일이 있었음

 

FILE STRUCTURE
 A  B  C  D    1  2  3  4

MEM STRUCTURE(after read() called)
            &mod_data[0],  &mod_data[1]
[ ][ ][ ][ ],     [ ][ ][ ][ ]
 D  C  B  A        4  3  2  1

mod_data는 uint32_t

그러면 B에 직접 접근하고 싶다

-> 혹시나 해서 찾아보니까 맞는듯

(http://jongampark.wordpress.com/2010/08/27/bit-field%EC%99%80-endian-byte-ordering/)

 

80              , (raw_data[0]& 0xFF)
 81              , (raw_data[0]& (0xFF<<8) ) >>8
 82              , (raw_data[0]& (0xFF<<0x10)) >>0x10
 83              , (raw_data[0]& (0xFF<<0x18)) >>0x18
 84              , (raw_data[1]& 0xFF)
 85              , (raw_data[1]& (0xFF<<8) ) >>8
 86              , (raw_data[1]& (0xFF<<0x10)) >>0x10
 87              , (raw_data[1]& (0xFF<<0x18)) >>0x18

이런식으로 shift시켜서 빼는거 말고

어떻게 해야할까?

 

 

 

 

 1. uint8_t*로 type casting

 2. uint8_t* offset = (uint8_t*) u32;
 8 uint8_t* offset;
 9 uint32_t data[2];
 10
 11 offset = (uint8_t*) data;
 12 offset[0] = 'a';
 13 offset[1] = 'b';
 14 offset[2] = 'c';
 15 offset[3] = NULL;
 16
 17
 18 printf("%c,%c,%c\n%s\n", offset[0], *(((uint8_t*) data)+1), ((uint8_t*) data)[2], data);

그러하다

 

 

궂이 쉬프팅 시키지 않아도 된다

121 write(write_fd, &((uint8_t*) &mod_data[0])[0], 1);
122 write(write_fd, &((uint8_t*) &mod_data[0])[1], 1);
123 write(write_fd, &((uint8_t*) &mod_data[0])[2], 1);
124 write(write_fd, &((uint8_t*) &mod_data[0])[3], 1);
125
126 write(write_fd, &((uint8_t*) &mod_data[1])[0], 1);
127 write(write_fd, &((uint8_t*) &mod_data[1])[1], 1);
128 write(write_fd, &((uint8_t*) &mod_data[1])[2], 1);
129 write(write_fd, &((uint8_t*) &mod_data[1])[3], 1);

'devel' 카테고리의 다른 글

gcc 개인적인 정리  (0) 2012.04.23
Sprintf part1  (0) 2008.11.29
Posted by 쵸코케키

블로그 이미지
chocokeki
쵸코케키

공지사항

Yesterday
Today
Total

달력

 « |  » 2025.1
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

글 보관함