Octave 언어 소스:
%
% Execute: octave -qf testHexView_02.m [filename]
%
% Date: 2013. 8. 18.
function printUsage()
printf("Usage: octave -qf testHexView_02.m [filename]\n");
endfunction
function y = getFileSize(fd)
n = ftell(fd);
fseek(fd, 0, SEEK_END);
x = ftell(fd);
fseek(fd, n, SEEK_SET);
y = x;
endfunction
function y = toHex(n)
s = "";
x1 = bitshift(bitand(n, 0xF0), -4);
x2 = bitand(n, 0xF);
if (x1 < 10)
s = strcat(s, char(toascii('0') + x1));
else
s = strcat(s, char(toascii('A') + (x1 - 10)));
endif
% printf("s = %s\n", s);
if (x2 < 10)
s = strcat(s, char(toascii('0') + x2));
else
s = strcat(s, char(toascii('A') + (x2 - 10)));
endif
% printf("s = %s\n", s);
y = s;
endfunction
function y = toHex8(n)
s = "";
% printf("s = %s\n", s);
x1 = bitshift(bitand(n, 0xF0000000), -28);
x2 = bitshift(bitand(n, 0xF000000), -24);
x3 = bitshift(bitand(n, 0xF00000), -20);
x4 = bitshift(bitand(n, 0xF0000), -16);
x5 = bitshift(bitand(n, 0xF000), -12);
x6 = bitshift(bitand(n, 0xF00), -8);
x7 = bitshift(bitand(n, 0xF0), -4);
x8 = bitand(n, 0xF);
if (x1 < 10)
s = strcat(s, char(toascii('0') + x1));
else
s = strcat(s, char(toascii('A') + (x1 - 10)));
endif
if (x2 < 10)
s = strcat(s, char(toascii('0') + x2));
else
s = strcat(s, char(toascii('A') + (x2 - 10)));
endif
if (x3 < 10)
s = strcat(s, char(toascii('0') + x3));
else
s = strcat(s, char(toascii('A') + (x3 - 10)));
endif
if (x4 < 10)
s = strcat(s, char(toascii('0') + x4));
else
s = strcat(s, char(toascii('A') + (x4 - 10)));
endif
%% s = sprintf("%s -", s);
if (x5 < 10)
% s = strcat(s, char(toascii('0') + x5));
s = sprintf("%s %c", s, char(toascii('0') + x5));
else
% s = strcat(s, char(toascii('A') + (x5 - 10)));
s = sprintf("%s %c", s, char(toascii('A') + (x5 - 10)));
endif
if (x6 < 10)
s = strcat(s, char(toascii('0') + x6));
else
s = strcat(s, char(toascii('A') + (x6 - 10)));
endif
if (x7 < 10)
s = strcat(s, char(toascii('0') + x7));
else
s = strcat(s, char(toascii('A') + (x7 - 10)));
endif
if (x8 < 10)
s = strcat(s, char(toascii('0') + x8));
else
s = strcat(s, char(toascii('A') + (x8 - 10)));
endif
y = s;
endfunction
arg_list = argv ();
if nargin < 1
printUsage();
quit;
endif
fname = arg_list{1};
if exist(fname, "dir")
printf("\"%s\" is a directory.\n", fname);
quit;
endif
if ! exist(fname, "file")
printf("The file \"%s\" does not exist.\n", fname);
quit;
endif
f = fopen(fname, "rb");
fsize = getFileSize(f);
printf("The size of the file \"%s\" is %d.\n", fname, fsize);
printf("\n");
fseek(f, 0, SEEK_SET);
n = 0;
dum = "";
while n < fsize
if mod(n, 16) == 0
printf("%s: ", toHex8(n));
endif
[val, count] = fread (f, 1);
if mod(n, 16) == 8
printf("-%s", toHex(val));
else
printf(" %s", toHex(val));
endif
if toascii(val) < toascii(' ') || toascii(val) > 0x7F
dum = sprintf("%s%c", dum, '.');
else
dum = sprintf("%s%c", dum, toascii(val));
endif
if mod(n, 16) == 15
printf(" |%s|\n", dum);
dum = "";
endif
n = n + 1;
endwhile
if mod(n, 16) > 0
for i = 1 : 16 - mod(n, 16)
printf(" ");
endfor
printf(" |%s", dum);
for i = 1 : 16 - mod(n, 16)
printf(" ");
endfor
printf("|\n");
dum = "";
endif
fclose(f);
printf("\nRead %d bytes.\n", n);
실행 예 1> octave -qf testHexView_02.m .\temp_1.bin
The size of the file ".\temp_1.bin" is 12.
0000 0000: 48 65 6C 6C 6F 20 74 68-65 72 65 0A |Hello there. |
Read 12 bytes.
실행 예 2> octave -qf testHexView_02.m .\myFile.ser
The size of the file ".\myFile.ser" is 130.
0000 0000: AC ED 00 05 73 72 00 06-50 65 72 73 6F 6E 07 31 |,m..sr..Person.1|
0000 0010: 46 DB A5 1D 44 AB 02 00-03 49 00 03 61 67 65 4C |F[%.D+...I..ageL|
0000 0020: 00 09 66 69 72 73 74 4E-61 6D 65 74 00 12 4C 6A |..firstNamet..Lj|
0000 0030: 61 76 61 2F 6C 61 6E 67-2F 53 74 72 69 6E 67 3B |ava/lang/String;|
0000 0040: 4C 00 08 6C 61 73 74 4E-61 6D 65 71 00 7E 00 01 |L..lastNameq.~..|
0000 0050: 78 70 00 00 00 13 74 00-05 4A 61 6D 65 73 74 00 |xp....t..Jamest.|
0000 0060: 04 52 79 61 6E 73 71 00-7E 00 00 00 00 00 1E 74 |.Ryansq.~......t|
0000 0070: 00 07 4F 62 69 2D 77 61-6E 74 00 06 4B 65 6E 6F |..Obi-want..Keno|
0000 0080: 62 69 |bi |
Read 130 bytes.
'프로그래밍 > Octave' 카테고리의 다른 글
Octave 로 계산 하는 집합 연산 몇 가지 (0) | 2014.01.27 |
---|---|
Cygwin 의 Octave 로 그린 평면 매개곡선을 jpg 파일로 저장하기 (0) | 2014.01.27 |
Octave 를 이용하여 비선형 연립미분방정식의 해곡선 그리기 (0) | 2014.01.26 |
Octave 를 이용하여 간단한 그래프 그리기 (0) | 2014.01.26 |
Octave 언어로 역삼각함수, 역쌍곡선함수 값을 구하는 예제 (0) | 2013.01.08 |