#include<stdio.h>
#include<string.h>
#include<limits.h>
#define BUFSIZE 48
#define NUMENCDATA 4
void printb( unsigned int v) {
unsigned int mask = ( int ) 1 << ( sizeof ( v) * CHAR_BIT - 1 ) ;
while ( mask >>= 1 ) ;
}
void putb( unsigned int v) {
}
static const size_t sixbase = 0b111111 ;
static const size_t eigbase = 0b11111111 ;
static const char table[ ] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" ;
enum State { First = 1 , Second = 2 , Third = 3 , Finish = 4 } ;
typedef struct {
size_t bytes;
enum State state;
} FSM;
static FSM initState = { 0 , First } ;
void FSM_init( FSM * self) {
* self = initState;
}
void FSM_stack( FSM * self, char c) {
size_t stack = ( size_t ) c;
switch ( self-> state) {
case First:
self-> bytes = ( stack << 16 ) ;
self-> state = Second;
break ;
case Second:
self-> bytes = self-> bytes | ( stack << 8 ) ;
self-> state = Third;
break ;
case Third:
self-> bytes = self-> bytes | stack;
self-> state = Finish;
break ;
case Finish:
break ;
}
}
void FSM_encode_flush( FSM * self) {
char res[ NUMENCDATA] ;
if ( self-> state == Finish) {
for ( size_t it = 0 ; it != NUMENCDATA; ++ it) {
res[ it] = table[ ( self-> bytes & ( sixbase << ( 18 - 6 * it) ) ) >> ( 18 - 6 * it) ] ;
}
fwrite ( res
, sizeof ( char ) , NUMENCDATA
, stdout
) ; putb( self-> bytes) ;
* self = initState;
}
}
void b64enc( FILE * fp) {
FSM fms;
FSM_init( & fms) ;
char buf[ BUFSIZE] ;
size_t nread;
while ( ( nread
= fread ( buf
, sizeof ( char ) , BUFSIZE
, fp
) ) > 0 ) { for ( size_t it = 0 ; it != nread; ++ it) {
FSM_stack( & fms, buf[ it] ) ;
FSM_encode_flush( & fms) ;
}
}
}
int main( void ) {
FILE * fp;
if ( fopen_s( & fp, "base64s.c" , "rb" ) < 0 ) {
fprintf ( stderr
, "ファイルを開けませんでした!\n " ) ; return 1 ;
}
b64enc( fp) ;
return 0 ;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RyaW5nLmg+CiNpbmNsdWRlPGxpbWl0cy5oPgoKI2RlZmluZSBCVUZTSVpFIDQ4CiNkZWZpbmUgTlVNRU5DREFUQSA0Cgp2b2lkIHByaW50Yih1bnNpZ25lZCBpbnQgdikgewogIHVuc2lnbmVkIGludCBtYXNrID0gKGludCkxIDw8IChzaXplb2YodikgKiBDSEFSX0JJVCAtIDEpOwogIGRvIHB1dGNoYXIobWFzayAmIHYgPyAnMScgOiAnMCcpOwogIHdoaWxlIChtYXNrID4+PSAxKTsKfQoKdm9pZCBwdXRiKHVuc2lnbmVkIGludCB2KSB7CiAgcHV0Y2hhcignMCcpLCBwdXRjaGFyKCdiJyksIHByaW50Yih2KSwgcHV0Y2hhcignXG4nKTsKfQoKc3RhdGljIGNvbnN0IHNpemVfdCBzaXhiYXNlID0gMGIxMTExMTE7CnN0YXRpYyBjb25zdCBzaXplX3QgZWlnYmFzZSA9IDBiMTExMTExMTE7CnN0YXRpYyBjb25zdCBjaGFyIHRhYmxlW10gPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CgplbnVtIFN0YXRlIHsgRmlyc3QgPSAxLCBTZWNvbmQgPSAyLCBUaGlyZCA9IDMsIEZpbmlzaCA9IDQgfTsKdHlwZWRlZiBzdHJ1Y3QgewogICAgc2l6ZV90IGJ5dGVzOwogICAgZW51bSBTdGF0ZSBzdGF0ZTsKfSBGU007CgpzdGF0aWMgRlNNIGluaXRTdGF0ZSA9IHsgMCwgRmlyc3QgfTsKCgp2b2lkIEZTTV9pbml0KEZTTSAqc2VsZikgewogICAgKnNlbGYgPSBpbml0U3RhdGU7Cn0KCnZvaWQgRlNNX3N0YWNrKEZTTSAqc2VsZiwgY2hhciBjKSB7CiAgICBzaXplX3Qgc3RhY2sgPSAoc2l6ZV90KWM7CiAgICBzd2l0Y2ggKHNlbGYtPnN0YXRlKSB7CiAgICAgICAgY2FzZSBGaXJzdDoKICAgICAgICAgICAgc2VsZi0+Ynl0ZXMgPSAoc3RhY2sgPDwgMTYpOwogICAgICAgICAgICBzZWxmLT5zdGF0ZSA9IFNlY29uZDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBTZWNvbmQ6CiAgICAgICAgICAgIHNlbGYtPmJ5dGVzID0gc2VsZi0+Ynl0ZXMgfCAoc3RhY2sgPDwgOCkgOwogICAgICAgICAgICBzZWxmLT5zdGF0ZSA9IFRoaXJkOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFRoaXJkOgogICAgICAgICAgICBzZWxmLT5ieXRlcyA9IHNlbGYtPmJ5dGVzIHwgc3RhY2s7CiAgICAgICAgICAgIHNlbGYtPnN0YXRlID0gRmluaXNoOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZpbmlzaDoKICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIuOCueOCv+ODg+OCr+OBjOOBhOOBo+OBseOBhOOBp+OBmeOAglxuIik7CiAgICAgICAgICAgIGJyZWFrOwogICAgfQp9Cgp2b2lkIEZTTV9lbmNvZGVfZmx1c2goRlNNICpzZWxmKSB7CiAgICBjaGFyIHJlc1tOVU1FTkNEQVRBXTsKICAgIGlmKHNlbGYtPnN0YXRlID09IEZpbmlzaCkgeyAKICAgICAgICBmb3Ioc2l6ZV90IGl0ID0gMDsgaXQgIT0gTlVNRU5DREFUQTsgKytpdCkgewogICAgICAgICAgICByZXNbaXRdID0gdGFibGVbKHNlbGYtPmJ5dGVzICYgKHNpeGJhc2UgPDwgKDE4IC0gNiAqIGl0KSkpID4+ICgxOCAtIDYgKiBpdCldOwogICAgICAgIH0KICAgICAgICBmd3JpdGUocmVzLCBzaXplb2YoY2hhciksIE5VTUVOQ0RBVEEsIHN0ZG91dCk7CiAgICAgICAgcHJpbnRmKCIgOiAiKTsKICAgICAgICBwdXRiKHNlbGYtPmJ5dGVzKTsKICAgICAgICAqc2VsZiA9IGluaXRTdGF0ZTsKICAgIH0KfQoKdm9pZCBiNjRlbmMoRklMRSAqZnApIHsKICAgIEZTTSBmbXM7CiAgICBGU01faW5pdCgmZm1zKTsKICAgIGNoYXIgYnVmW0JVRlNJWkVdOwogICAgc2l6ZV90IG5yZWFkOwogICAgd2hpbGUoKG5yZWFkID0gZnJlYWQoYnVmLCBzaXplb2YoY2hhciksIEJVRlNJWkUsIGZwKSkgPiAwKSB7CiAgICAgICAgZm9yKHNpemVfdCBpdCA9IDA7IGl0ICE9IG5yZWFkOyArK2l0KSB7CiAgICAgICAgICAgIEZTTV9zdGFjaygmZm1zLCBidWZbaXRdKTsKICAgICAgICAgICAgRlNNX2VuY29kZV9mbHVzaCgmZm1zKTsKICAgICAgICB9CiAgICB9CiAgICAgICAgcHJpbnRmKCJcbiIpOwp9CgoKaW50IG1haW4odm9pZCkgewogICAgRklMRSAqZnA7CiAgICBpZiggZm9wZW5fcygmZnAsImJhc2U2NHMuYyIsICJyYiIpIDwgMCkgewogICAgICAgIGZwcmludGYoc3RkZXJyLCAi44OV44Kh44Kk44Or44KS6ZaL44GR44G+44Gb44KT44Gn44GX44GfIVxuIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICBiNjRlbmMoZnApOwogICAgZmNsb3NlKGZwKTsKICAgIHJldHVybiAwOwp9
compilation info
prog.c: In function ‘main’:
prog.c:86:9: warning: implicit declaration of function ‘fopen_s’; did you mean ‘fopen’? [-Wimplicit-function-declaration]
if( fopen_s(&fp,"base64s.c", "rb") < 0) {
^~~~~~~
fopen
At top level:
prog.c:19:21: warning: ‘eigbase’ defined but not used [-Wunused-const-variable=]
static const size_t eigbase = 0b11111111;
^~~~~~~
/usr/bin/ld: /home/S5sApo/cc0GRKNg.o: in function `main':
prog.c:(.text.startup+0x26): undefined reference to `fopen_s'
collect2: error: ld returned 1 exit status
stdout