티스토리 뷰
안녕하세요.
신랑각시의 신랑 입니다.
일하면서, 이진 값 배열 (binary stream) 을 printable string 으로 변환해야 할 일이 생겼습니다.
이런 경우에는 BCD 을 하여, 값을 변환하여 처리하곤 합니다.
예를 들면,
0x93, 0x17, 0x52, 0xF4
라는 이진 배열 ( 4 byte ) 이 있을 때, 이 값을 printable string 으로 변환하기 위하여 BCD encoding 을 하면,
0x39, 0x33, 0x31, 0x37, 0x35, 0x32, 0x46, 0x34
로 변환됩니다. 각각의 값은 ascii 표를 통하여 보면, 931752F4 로 print 됩니다.
4 bit 값 ( max 0xF ) 을 8 bit 로 표현하다 보니까, 길이가 2배로 늘어납니다.
그럼 C++ 코드 입니다.
BCD encoding
const char * BCD2STR(char * _dest, char * _src, int _len) { static const char * out = "0123456789ABCDEF"; for(int pos = 0; pos < _len; pos++) { *_dest++ = out[(_src[pos] >> 4) & 0x0f]; *_dest++ = out[_src[pos] & 0x0f]; } *_dest = '\0'; return _dest - (_len * 2); }
BCD decoding
const unsigned char * STR2BCD(unsigned char * _dest, char * _src, int _len) { char h, l; for(int pos=0; pos < _len; pos++) { h = _src[pos*2]; l = _src[pos*2+1]; h = ( (h & 0xf0) == 0x30 )?(h & 0x0f):(9 + (h & 0x0f)); l = ( (l & 0xf0) == 0x30 )?(l & 0x0f):(9 + (l & 0x0f)); *_dest++ = (unsigned char)(((h & 0x0f) << 4) | l); } return (_dest - (_len/2)); }
'일하면서' 카테고리의 다른 글
[short code] 8 byte endian 변환 (0) | 2017.12.26 |
---|---|
[short code] 반복적인 ftp 작업을 one command 로 (0) | 2017.12.11 |
[필요해서 만든 코드] - 포트 포워딩 (port forwarding) (0) | 2017.11.30 |
[short code] c++ for vs map vs unordered_map 중 누가 빠를까? (0) | 2017.11.16 |
[short code] 파일이 존재하는 디렉토리 삭제하기 - C++ (0) | 2017.09.06 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- c++
- std:map
- forwarding
- ftp 자동접속 스크립트
- 8 byte 엔디안 변환
- IPv6 client
- client socket
- IPv6 socket
- 엔디안 변환
- ftp 스크립트
- endian
- endian 변환
- socket program
- ftp 자동접속
- IPv4 and IPv6
- 서버 경유
- 엔디안
- remove
- IPv6 server
- ssh key 만들기
- ssh key
- IPv6
- sftp 자동접속
- short code
- ipv6 socket program
- BCD 변환
- 8byte endian 변환
- IPv6 echo server
- IPv6 IPv4 Dual client
- FTW
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함