문자열 변환기를 파일에 정보가 16 진수

A

Artem

Guest
항목을 편집 - 첨부 파일

난 변환기를 형식이 서면에 몇 시간 16 진수 인텔 작은 상징합니다.프로그램)입니다 atmega에 필요한 그것을 변환 그냥 내가 (기호에 적합한 형식으로 표현을 사용하는 경우에 구성은 초기 쓰기 eeproms.

이렇게 파일을 기호 변환을 수행할 수 있습니다 :
"장치"0x0000000000 "열기", ""닫기 ", 0xEF,"DEVICE1 ", 0xFF,"열기 "닫기",
0 (에서) 0200
"터미네이터", 0xDE, "열기", "닫기"
0b00000001, 0b01010101, 0b01011110, 0b01011110, 0b01011110, 0b01011110, 0b01011110, 0b01011110, 0b01011110, 0b01011110, 0b0101111000000001아래의 16 진수 파일 같은 정보로 :
: 1000000044455649434500000000004F50454E43CB
: 100010004C4F5345EF44455649434531FF4F5045FA
: 100020004E434C4F5345000000000000000000000C
: 1000300000000000000000000000000000000000C0
: 1000400000000000000000000000000000000000B0
: 1000500000000000000000000000000000000000A0
: 100060000000000000000000000000000000000090
: 100070000000000000000000000000000000000080
: 100080000000000000000000000000000000000070
: 100090000000000000000000000000000000000060
: 1000A0000000000000000000000000000000000050
: 1000B0000000000000000000000000000000000040
: 1000C0000000000000000000000000000000000030
: 1000D0000000000000000000000000000000000020
: 1000E0000000000000000000000000000000000010
: 1000F0000000000000000000000000000000000000
: 1001000000000000000000000000000000000000EF
: 1001100000000000000000000000000000000000DF
: 1001200000000000000000000000000000000000CF
: 1001300000000000000000000000000000000000BF
: 1001400000000000000000000000000000000000AF
: 10015000000000000000000000000000000000009F
: 10016000000000000000000000000000000000008F
: 10017000000000000000000000000000000000007F
: 10018000000000000000000000000000000000006F
: 10019000000000000000000000000000000000005F
: 1001A000000000000000000000000000000000004F
: 1001B000000000000000000000000000000000003F
: 1001C000000000000000000000000000000000002F
: 1001D000000000000000000000000000000000001F
: 1001E000000000000000000000000000000000000F
: 1001F00000000000000000000000000000000000FF
: 100200005445524D494E41544F52DE4F50454E4396
: 100210004C4F534501555E5E5E5E5E5E5E5E5E0106
: 00000001FF

있다면 그것은 당신이 생각 운전대를 reinvented가 - 난 감사하게 생각 하나 원에 대해 통지를받을 수 있습니다.귀하의 의견 Wellcome 있습니다.

/************************************************* ************************************************** **********************
프로그래밍 *이 EEPROM이 파일을위한 16 진수 형식의 파일을 인텔 상징적인 프로그램은 변환합니다.
코드 부품 * 프로그램 exehex 해리스의 있었어요 찍은에서 찰스 F..
* 프로그램은 초기 촉진 및 데이터와 함께 의도에 기입하는 EEPROM이있을 때 사용되는 MCU의의
16 진수로 변환 * 상징적인 데이터입니다.
* 심볼릭 파일이 프로그램에 입력으로 사용.파일 상징에 다음 구문을 지원됩니다
*이 구분 기호 - ',' '' '\ r에'\ n을 '.
* 문자열 구문 - "제한된 xxxx는"어디의 영숫자 문자열 번호입니다 여기서 xxxx는 문자
* INFILE_MAX_SIZE 일정
* 16 진수 - 0xxxxx 여기서 XXXX) 0123456789ABCDEF (는 시리즈의 16 진수 digitis.번호 자리수의 16 진수
* 후 0x로 프리 픽스도해야 INFILE_MAX_SIZE를 넘지 않아야 길이를 발생
* 이진 숫자 - 8 0bBBBB의 일련의 BBBB는 숫자 wehre 이진 자릿수 여러되어야 빈 자리에
* 주소 제약 - 0 (에서) AAAA AAAA)는 16 진수 표현입니다 주소 (0123456789ABCDEF.제약 조건은 결과입니다
지정된 iterator 점프 주소를 *로 주소.현재 주소에서 전체 순위
이동 주소 * iterator가에 '0 '숫자로 가득합니다.그것이 허용되지 않습니다
*이 iterator하게 주소의 현재 주소를 뒤로 점프보다 적습니다 목적지 주소.
*
* 참고 : 이것은 모든 구분 기호없이 숫자 16 진수 또는 이진 제약, 주소가 문자열을 시작 직후입니다 허용
* 그 반대.
*
************************************************** ************************************************** *********************/
#은 <stdio.h> 포함

# 길이를 정의 INFILE_MAX_SIZE 20000 / / 최대 입력 파일
# 시작을 정의 STATE_START 0 / / FSM 상태 모색 -
# 구문 분석을 정의 STATE_STRING 1 / / FSM 상태 - 문자열
# 파싱 정의 STATE_HEX 2 / / FSM 상태 - 16 진수 숫자를
#은 숫자 분석 정의 STATE_BIN 3 / / FSM 상태 - 바이너리
# 접두사를 정의 STATE_CHECKX 4 / / FSM 상태 - 확인
# 제약 조건을 정의 STATE_ADR 5 / / FSM 상태 - 주소

) 번째 문자 hex_hi_hi (서명 n;
) 번째 문자 hex_hi_lo (서명 n;
) 번째 문자 hex_lo_hi (서명 n;
) 번째 문자 hex_lo_lo (서명 n;
서명되지 않은 번째 문자 hi_byte (서명 N)을;
서명되지 않은 번째 문자 lo_byte (서명 N)을;
무효의 puthex (서명 번째 문자 유형,
서명되지 않은 loadaddress,
서명되지 않은 번째 문자 datalen,
서명되지 않은 char *로 데이터);

char *로의 deffile = "input.txt";
메기 hexbuf [INFILE_MAX_SIZE];
파일 * FP가;

/*------------------------------------------------ -------------------------------------------------- ----------*
|
| 구문 :
| 인수 :
| 반환 값 :
| 설명 :
|
*------------------------------------------------- -------------------------------------------------- ---------*/
int 주 (argc 번째 문자 ** argv가)
(
char *로의 str_p; / /
adr 서명 int 나, 지미,; / /
int TCHAR; / /
메기 주, cnt, tmp를; / /
/ / 선택 사용하는 파일
목록 경우 (argc == 1) / / 파일이 없다면 인수
str_p = deffile; / / 사용하는 기본 - "input.txt"파일
또 / / 다른 것이 지정된 파일
str_p = 변수는 argv [1]; 사용하여 파일에서 인수 / /리스트
/ /
에서면 ((FP가 = fopen (str_p를, "연구")) == NULL을 상징) / 읽을 파일을 열기 /
(/ /
printf (이하 "%"를 \ 파일 못했습니다에게 공개) ...", str_p s의 종료 "를 \; / /
반환 -1; / /
) / /
/ /
상태 = STATE_START; / / 설정 파싱 FSM 상태를 상태를 시작합니다
0은 (i =;은 (i <fgetc (FP가 INFILE_MAX_SIZE )&&((의 TCHAR =))! = EOF)

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="눈짓" border="0" />

파싱 입력 파일에서 루프 / /
(/ /
주 스위치 (주) / /에 지점 FSM
(/ /
/************************************************* ******************
* 기호 스타트 구문 분석
************************************************** *****************/
사건 STATE_START가 : / / 시작 - 시작 심볼에 대한 추구
/ 스위치 (TCHAR) / 지점에 문자 읽기
(/ /
사건 ' "은': / / '"'- 영숫자 문자열 시작
상태 = STATE_STRING; / / 문자열을 파싱 시작
휴식; / /
/ /
경우 '0 ': / / '0'- 접두사 중 하나를 16 진수 또는 2 진 숫자 (0x로 또는 0b)
상태 = STATE_CHECKX; / / 고토 분석 접두사
휴식; / /
/ /
사건 '은': / /가 ','쉼표 구분 기호입니다 - 폐기
사건 '\ r은': / / '\ r에 Carrage 돌아가기 구분 기호입니다 - 폐기
사건 '\ n은': / / '\ n'을 새로운 라인 구분 기호입니다 - 폐기
사건은 ': / /'공간 구분 기호입니다 - 폐기
휴식; / /
/ / 다른 캐릭터는 - 오류의 성격을 unpermitted
기본값 : / /
printf (이하 "오류가 발생) 해당 없음 unpermitted 시작 문자 %의 C를, 종료 ... \", (메기) TCHAR;
고토 end_lab; / /
) / /
휴식; / /
/ /
/************************************************* ******************
* 문자열 구문 분석
************************************************** *****************/
케이스 STATE_STRING : / / 문자열 - 문자열 구문 분석이 진행 중입니다
/ 스위치 (TCHAR) / 지점에 문자 읽기
(/ /
사건 ' "': / / '"'- 문자열의 끝을 영숫자
상태 = STATE_START가; / / 문자열의 끝을 발견 - 고토 상징 다른 탐색을위한
휴식; / /
/ /
기본값 : / / 다른 모든 문자 - 문자열에 속해
hexbuf은 [나 ] = TCHAR; 문자를 16 진수로 배열 스토어 / /
휴식; / /
) / /
휴식; / /
/ /
/************************************************* ******************
* 체크 엑스 PREFIX
************************************************** *****************/
사건 STATE_CHECKX : 프리 픽스에 대한 바이너리 또는 16 진수 숫자 구문 분석 / / CHECKX -
/ 스위치 (TCHAR) / 지점에 문자 읽기
(/ /
경우 'x'를 : / / 'x'를 - 16 진수 nuber 접두사 발견
상태 = STATE_HEX; / / FSM 상태 - 파싱 16 진수 번호
cnt = 0; 숫자의 16 진수 digitis 리셋 / / 카운터
tmp를 = 0; 임시 저장에 대한 16 진수 번호를 재설정 / /
휴식; / / 고토 16 진수 숫자 구문 분석
/ /
경우 'B는': / / 'B의 - 이진 문자열 접두사 발견
상태 = STATE_BIN; / / FSM 상태 - 이진 숫자 구문 분석
cnt = 0; coutner의 이진 숫자 리셋 / / 읽기
tmp를 = 0; 임시 저장소에 대한 바이너리 번호를 재설정 / /
휴식; / / 고토 이진 숫자 구문 분석
/ /
경우 '@': / / '@'- 소재지 제약
상태 = STATE_ADR; / /
adr = 0; / /
휴식; / /
/ /
기본값 : / / 다른 모든 문자 - 오류 중 'B의 또는'x '를 추위 예상
박았 ( "나도 \ 'b \'는없고 \ 'x는 \'발견 ..."); 후 \는 '0 \ '를 시작 종료 문자,
고토 end_lab; / /
) / /
휴식; / /
/ /
/************************************************* ******************
* 16 진수로 파싱
************************************************** *****************/
사건 STATE_HEX : / / 16 진수 - 16 진수 숫자 진행 파싱
/ 스위치 (TCHAR) / 지점에 문자 읽기
(/ /
사건 ' "은': / / '"'- 기호 문자열 시작) 찾은 16 진수 숫자의 의미 끝 (
)하면 ((cnt & 1! = 0) 홀수의 자리 저장하는 경우 / / - 16 진수 숫자의 오류 번호
(/ / 길이는 바이트로 정렬해야합니다 수도
박았 ( "오류 - 16 진수 문자열을 ..."); 번호의 홀수가 포함되어 자리 종료,
고토 end_lab; / /
) / /
상태 = STATE_STRING; / / FSM 상태 - 시작 문자열 구문 분석
휴식; / /
/ /
경우 '0 ': / /
경우 '1 ': / /
경우 '2 ': / /
경우 '3 ': / /
경우 '4 ': / /
경우 '5 ': / /
사건을 '6 ': / /
경우 '7 ': / /
경우 '8 ': / /
경우 '9 ': / /
)하는 경우 (cnt == 0 / /
(/ /
tmp를 = (TCHAR - 0x30) <<4; / /
cnt = 1; / /
) / /
또 / /
(/ /
tmp 디렉토리의 | = (TCHAR - 0x30); / /
hexbuf은 [나 ] = tmp를; / /
cnt = 0; / /
) / /
휴식; / /
사건 '': / /
경우 'B의 : / /
경우 '하고'C : / /
경우 '개발': / /
경우 '이메일': / /
경우 '여': / /
)하는 경우 (cnt == 0 / /
(/ /
tmp를 = (TCHAR - 0x37) <<4; / /
cnt = 1; / /
) / /
또 / /
(/ /
tmp 디렉토리의 | = (TCHAR - 0x37); / /
hexbuf은 [나 ] = tmp를; / /
cnt = 0; / /
) / /
휴식; / /
/ /
사건 ',': / /
경우 ': / /
사건 '\ r에 : / /
사건 '\ n'을 : / /
)하는 경우 (cnt == 1 / /
(/ /
박았 ( "오류 - 16 진수 문자열을 ..."); 번호의 홀수가 포함되어 자리 종료,
고토 end_lab; / /
) / /
상태 = STATE_START; / /
휴식; / /
/ /
기본값 : / /
박았 ( "오류 ...");을 종료, unpermitted characeter를 24 자리의 16 진수
고토 end_lab; / /
) / /
휴식; / /
/ /
/************************************************* ******************
* 주소 파싱 제약
************************************************** *****************/
케이스 STATE_ADR : / / 파싱 주소 제약
/ 스위치 (TCHAR) / 지점에 문자 읽기
(/ /
사건 ' "': / /
사건 ',': / /
경우 ': / /
사건 '\ r에 : / /
사건 '\ n'을 : / /
/면 (adr> = 1) /
(/ /
(용; 나! = adr; 난 ) / /
hexbuf은 [내가] = 0x00; / /
) / /
또 / /
(/ /
printf (이하 "오류 - 후방) \ 점프에 주소 제약, 종료 ... n";
고토 end_lab; / /
) / /
/ /
'면 (TCHAR == "') / /
상태 = STATE_STRING; / / FSM 상태 - 시작 문자열 구문 분석
또 / /
상태 = STATE_START; / /
휴식; / /
/ /
경우 '0 ': / /
경우 '1 ': / /
경우 '2 ': / /
경우 '3 ': / /
경우 '4 ': / /
경우 '5 ': / /
사건을 '6 ': / /
경우 '7 ': / /
경우 '8 ': / /
경우 '9 ': / /
adr = (adr <<4) (TCHAR - 0x30); / /
휴식; / /
사건 '': / /
경우 'B의 : / /
경우 '하고'C : / /
경우 '개발': / /
경우 '이메일': / /
경우 '여': / /
adr = (adr <<4) (TCHAR - 0x37); / /
휴식; / /
/ /
기본값 : / /
박았 ( "오류 ...");을 종료, unpermitted characeter를 24 자리의 16 진수
고토 end_lab; / /
) / /
휴식; / /
/ /
/************************************************* ******************
*
************************************************** *****************/
사건 STATE_BIN : / /
/ 스위치 (TCHAR) /
(/ /
경우 '0 ': / /
경우 '1 ': / /
tmp를 = tmp를 <<1; / /
/ == 경우 (TCHAR '1 ') /
tmp를 = 1; / /
cnt 경우 ( 의 ==

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="시원한" border="0" />

/ /
(/ /
hexbuf은 [나 ] = tmp를; / /
tmp를 = 0; / /
cnt = 0; / /
) / /
휴식; / /
/ /
사건 ',': / /
사건 '\ r에 : / /
사건 '\ n'을 : / /
사건 ' "': / /
cnt면 (! = 0) / /
(/ /
박았 ( "오류 - 빈 문자열이 포함되어 ..."); unaligned의 수를 자리 종료,
고토 end_lab; / /
) / /
'면 (TCHAR == "') / /
상태 = STATE_STRING; / /
또 / /
상태 = STATE_START; / /
휴식; / /
/ /
기본값 : / /
박았 ( "오류 파일을 구문 분석하는 동안, 벗어 ..."); / /
반환 -1; / /
) / /
휴식; / /
/ /
) / /
) / /
)에 대한 (곳은 = 0;; 곳은 = 16 / /
(/ /
)하면 ((지미 15) <난 / /
puthex (0, 지미, 16, & hexbuf의 [지미]); / /
다른면 (곳은 <1) / /
(/ /
puthex (0, 지미, 난 - 지미, & hexbuf의 [지미]); / /
휴식; / /
) / /
또 / /
휴식; / /
) / /
박았 ( ": 형식 (실제로 puthex 수도있을라고 기록 00000001FF"); / / 파일에 넣어 끝)
/ /
end_lab : / /
fclose (FP가); / /
반환 0;
)

/*------------------------------------------------ -------------------------------------------------- ----------*
|
| 구문 :
| 인수 :
| 반환 값 :
| 설명 :
|
*------------------------------------------------- -------------------------------------------------- ---------*/
무효 puthex
(
서명되지 않은 번째 문자 유형,
서명되지 않은 loadaddress,
서명되지 않은 번째 문자 datalen,
서명되지 않은 char *로 데이터를
)
(
체크섬 int = 0;
int 나, j를;

putchar (':');
putchar (hex_lo_hi (datalen));
putchar (hex_lo_lo (datalen));
체크섬 = datalen;

putchar (hex_hi_hi (loadaddress));
putchar (hex_hi_lo (loadaddress));
putchar (hex_lo_hi (loadaddress));
putchar (hex_lo_lo (loadaddress));
(loadaddress 체크섬 = hi_byte);
(loadaddress 체크섬 = lo_byte);

putchar (hex_lo_hi (타입));
putchar (hex_lo_lo (타입));
체크섬 는 = 종류;

9은 (i = j를 = 0; 일본 <datalen; 전 = 2, j를 ) (
putchar (hex_lo_hi (데이터 [j를]));
putchar (hex_lo_lo (데이터 [j를]));
체크섬 = 데이터 [일본];
)
체크섬 = - 체크섬;
putchar (hex_lo_hi (체크섬));
putchar (hex_lo_lo (체크섬));
putchar ( '\ n'을);
)

정적 번째 문자 hextable [] = "0123456789ABCDEF";

/*------------------------------------------------ -------------------------------------------------- ----------*
|
*------------------------------------------------- -------------------------------------------------- ---------*/
(번째 문자 hex_hi_hi (서명 N)을]를>> 4) & 0xf 반환 hextable [를 (hi_byte (N)을;)
/*------------------------------------------------ -------------------------------------------------- ----------*
|
*------------------------------------------------- -------------------------------------------------- ---------*/
(번째 문자 hex_hi_lo (서명 N)을] (n을) & 0xf 반환 hextable [국가 hi_byte;)
/*------------------------------------------------ -------------------------------------------------- ----------*
|
*------------------------------------------------- -------------------------------------------------- ---------*/
(번째 문자 hex_lo_hi (서명 N)을]를>> 4) & 0xf 반환 hextable [를 (lo_byte (N)을;)
/*------------------------------------------------ -------------------------------------------------- ----------*
|
*------------------------------------------------- -------------------------------------------------- ---------*/
(번째 문자 hex_lo_lo (서명 N)을] (n을) & 0xf 반환 hextable [국가 lo_byte;)
/*------------------------------------------------ -------------------------------------------------- ----------*
|
*------------------------------------------------- -------------------------------------------------- ---------*/
서명되지 않은 번째 문자 hi_byte (서명 N)을 반환 (((n>>

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="시원한" border="0" />

& 0xff);)
/*------------------------------------------------ -------------------------------------------------- ----------*
|
*------------------------------------------------- -------------------------------------------------- ---------*/
서명되지 않은 번째 문자 lo_byte (서명 N)을 반환 ((n & 0xff);)
에 마지막으로 수정한 시간에 2005년 3월 28일 14시 48분; 편집한 총 1 Artem

 
미안하지만, 당신은 첨부 파일이 필요합니다 보려면 로그인을에

 
로 : smilies있어 변환 문자가 일부 첨부 파일이 당신이대로 소스에 포함되어 8) ->

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="시원한" border="0" />코드 :

아마도 "코드 모드"로 표시도 가능합니다. 8) -> 8)
 

Welcome to EDABoard.com

Sponsor

Back
Top