From 1b636bf2ae124cdb7f8b2e7317d4ab733edb5590 Mon Sep 17 00:00:00 2001 From: fumiama Date: Fri, 29 Oct 2021 00:11:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=95=B4=E6=95=B0=E6=BA=A2?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 32/base14.c | 41 +++++++++++++++++++---------------------- 32/base14.h | 6 +++--- 64/base14.c | 43 +++++++++++++++++++++---------------------- 64/base14.h | 6 +++--- base16384.h | 1 - 5 files changed, 46 insertions(+), 51 deletions(-) diff --git a/32/base14.c b/32/base14.c index de46af2..8f5cbb7 100644 --- a/32/base14.c +++ b/32/base14.c @@ -6,9 +6,9 @@ //#define DEBUG -LENDAT* encode(const uint8_t* data, const uint32_t len) { +LENDAT* encode(const uint8_t* data, const int32_t len) { LENDAT* encd = (LENDAT*)malloc(sizeof(LENDAT)); - uint32_t outlen = len / 7 * 8; + int32_t outlen = len / 7 * 8; uint8_t offset = len % 7; switch(offset) { //算上偏移标志字符占用的2字节 case 0: break; @@ -27,7 +27,7 @@ LENDAT* encode(const uint8_t* data, const uint32_t len) { encd->len = outlen; uint32_t* vals = (uint32_t*)(encd->data); uint32_t n = 0; - uint32_t i = 0; + int32_t i = 0; for(; i <= len - 7; i += 7) { register uint32_t sum = 0x0000003f & ((uint32_t)data[i] >> 2); sum |= (((uint32_t)data[i + 1] << 6) | (data[i] << 14)) & 0x0000ff00; @@ -48,28 +48,25 @@ LENDAT* encode(const uint8_t* data, const uint32_t len) { printf("n: %u, add sum: %08x\n", n, sum); #endif } - if(offset > 0) { + uint8_t o = offset; + if(o--) { register uint32_t sum = 0x0000003f & (data[i] >> 2); sum |= ((uint32_t)data[i] << 14) & 0x0000c000; - if(offset > 1) { + if(o--) { sum |= ((uint32_t)data[i + 1] << 6) & 0x00003f00; sum |= ((uint32_t)data[i + 1] << 20) & 0x00300000; - if(offset > 2) { + if(o--) { sum |= ((uint32_t)data[i + 2] << 12) & 0x000f0000; sum |= ((uint32_t)data[i + 2] << 28) & 0xf0000000; - if(offset == 2) { - sum += 0x004e004e; - vals[n++] = sum; - } - if(offset > 3) { + if(o--) { sum |= ((uint32_t)data[i + 3] << 20) & 0x0f000000; sum += 0x004e004e; vals[n++] = sum; sum = (((uint32_t)data[i + 3] << 2)) & 0x0000003c; - if(offset > 4) { + if(o--) { sum |= (((uint32_t)data[i + 4] >> 6)) & 0x00000003; sum |= ((uint32_t)data[i + 4] << 10) & 0x0000fc00; - if(offset > 5) { + if(o--) { sum |= ((uint32_t)data[i + 5] << 2) & 0x00000300; sum |= ((uint32_t)data[i + 5] << 16) & 0x003f0000; } @@ -85,9 +82,9 @@ LENDAT* encode(const uint8_t* data, const uint32_t len) { return encd; } -LENDAT* decode(const uint8_t* data, const uint32_t len) { +LENDAT* decode(const uint8_t* data, const int32_t len) { LENDAT* decd = (LENDAT*)malloc(sizeof(LENDAT)); - uint32_t outlen = len; + int32_t outlen = len; uint8_t offset = 0; if(data[len-2] == '=') { offset = data[len-1]; @@ -107,7 +104,7 @@ LENDAT* decode(const uint8_t* data, const uint32_t len) { decd->len = outlen; uint32_t* vals = (uint32_t*)data; uint32_t n = 0; - uint32_t i = 0; + int32_t i = 0; for(; i <= outlen - 7; n++) { //n实际每次自增2 register uint32_t sum = vals[n++]; sum -= 0x004e004e; @@ -122,23 +119,23 @@ LENDAT* decode(const uint8_t* data, const uint32_t len) { decd->data[i++] = ((sum & 0x00000300) >> 2) | ((sum & 0x003f0000) >> 16); decd->data[i++] = ((sum & 0xff000000) >> 24); } - if(offset > 0) { + if(offset--) { register uint32_t sum = vals[n++]; sum -= 0x0000004e; decd->data[i++] = ((sum & 0x0000003f) << 2) | ((sum & 0x0000c000) >> 14); - if(offset > 1) { + if(offset--) { sum -= 0x004e0000; decd->data[i++] = ((sum & 0x00003f00) >> 6) | ((sum & 0x00300000) >> 20); - if(offset > 2) { + if(offset--) { decd->data[i++] = ((sum & 0x000f0000) >> 12) | ((sum & 0xf0000000) >> 28); - if(offset > 3) { + if(offset--) { decd->data[i++] = (sum & 0x0f000000) >> 20; sum = vals[n]; sum -= 0x0000004e; decd->data[i++] |= (sum & 0x0000003c) >> 2; - if(offset > 4) { + if(offset--) { decd->data[i++] = ((sum & 0x00000003) << 6) | ((sum & 0x0000fc00) >> 10); - if(offset > 5) { + if(offset--) { sum -= 0x004e0000; decd->data[i] = ((sum & 0x00000300) >> 2) | ((sum & 0x003f0000) >> 16); } diff --git a/32/base14.h b/32/base14.h index cfbdecb..2530946 100644 --- a/32/base14.h +++ b/32/base14.h @@ -5,9 +5,9 @@ #define B14BUFSIZ 8192 struct LENDAT { uint8_t* data; - uint32_t len; + int32_t len; }; typedef struct LENDAT LENDAT; -LENDAT* encode(const uint8_t* data, const uint32_t len); -LENDAT* decode(const uint8_t* data, const uint32_t len); +LENDAT* encode(const uint8_t* data, const int32_t len); +LENDAT* decode(const uint8_t* data, const int32_t len); diff --git a/64/base14.c b/64/base14.c index 2457684..07605bb 100644 --- a/64/base14.c +++ b/64/base14.c @@ -6,9 +6,9 @@ //#define DEBUG -LENDAT* encode(const uint8_t* data, const uint64_t len) { +LENDAT* encode(const uint8_t* data, const int64_t len) { LENDAT* encd = (LENDAT*)malloc(sizeof(LENDAT)); - uint64_t outlen = len / 7 * 8; + int64_t outlen = len / 7 * 8; uint8_t offset = len % 7; switch(offset) { //算上偏移标志字符占用的2字节 case 0: break; @@ -27,7 +27,7 @@ LENDAT* encode(const uint8_t* data, const uint64_t len) { encd->len = outlen; uint64_t* vals = (uint64_t*)(encd->data); uint64_t n = 0; - uint64_t i = 0; + int64_t i = 0; for(; i <= len - 7; i += 7) { register uint64_t sum = 0x000000000000003f & ((uint64_t)data[i] >> 2); sum |= (((uint64_t)data[i + 1] << 6) | (data[i] << 14)) & 0x000000000000ff00; @@ -43,22 +43,23 @@ LENDAT* encode(const uint8_t* data, const uint64_t len) { printf("i: %llu, add sum: %016llx\n", i, sum); #endif } - if(offset > 0) { + uint8_t o = offset; + if(o--) { register uint64_t sum = 0x000000000000003f & (data[i] >> 2); sum |= ((uint64_t)data[i] << 14) & 0x000000000000c000; - if(offset > 1) { + if(o--) { sum |= ((uint64_t)data[i + 1] << 6) & 0x0000000000003f00; sum |= ((uint64_t)data[i + 1] << 20) & 0x0000000000300000; - if(offset > 2) { + if(o--) { sum |= ((uint64_t)data[i + 2] << 12) & 0x00000000000f0000; sum |= ((uint64_t)data[i + 2] << 28) & 0x00000000f0000000; - if(offset > 3) { + if(o--) { sum |= ((uint64_t)data[i + 3] << 20) & 0x000000000f000000; sum |= ((uint64_t)data[i + 3] << 34) & 0x0000003c00000000; - if(offset > 4) { + if(o--) { sum |= ((uint64_t)data[i + 4] << 26) & 0x0000000300000000; sum |= ((uint64_t)data[i + 4] << 42) & 0x0000fc0000000000; - if(offset > 5) { + if(o--) { sum |= ((uint64_t)data[i + 5] << 34) & 0x0000030000000000; sum |= ((uint64_t)data[i + 5] << 48) & 0x003f000000000000; } @@ -77,9 +78,9 @@ LENDAT* encode(const uint8_t* data, const uint64_t len) { return encd; } -LENDAT* decode(const uint8_t* data, const uint64_t len) { +LENDAT* decode(const uint8_t* data, const int64_t len) { LENDAT* decd = (LENDAT*)malloc(sizeof(LENDAT)); - uint64_t outlen = len; + int64_t outlen = len; uint8_t offset = 0; if(data[len-2] == '=') { offset = data[len-1]; @@ -99,10 +100,9 @@ LENDAT* decode(const uint8_t* data, const uint64_t len) { decd->len = outlen; uint64_t* vals = (uint64_t*)data; uint64_t n = 0; - uint64_t i = 0; + int64_t i = 0; for(; i <= outlen - 7; n++) { - register uint64_t sum = vals[n]; - sum -= 0x004e004e004e004e; + register uint64_t sum = vals[n] - 0x004e004e004e004e; decd->data[i++] = ((sum & 0x000000000000003f) << 2) | ((sum & 0x000000000000c000) >> 14); decd->data[i++] = ((sum & 0x0000000000003f00) >> 6) | ((sum & 0x0000000000300000) >> 20); decd->data[i++] = ((sum & 0x00000000000f0000) >> 12) | ((sum & 0x00000000f0000000) >> 28); @@ -111,21 +111,20 @@ LENDAT* decode(const uint8_t* data, const uint64_t len) { decd->data[i++] = ((sum & 0x0000030000000000) >> 34) | ((sum & 0x003f000000000000) >> 48); decd->data[i++] = ((sum & 0xff00000000000000) >> 56); } - if(offset > 0) { - register uint64_t sum = vals[n]; - sum -= 0x000000000000004e; + if(offset--) { + register uint64_t sum = vals[n] - 0x000000000000004e; decd->data[i++] = ((sum & 0x000000000000003f) << 2) | ((sum & 0x000000000000c000) >> 14); - if(offset > 1) { + if(offset--) { sum -= 0x00000000004e0000; decd->data[i++] = ((sum & 0x0000000000003f00) >> 6) | ((sum & 0x0000000000300000) >> 20); - if(offset > 2) { + if(offset--) { decd->data[i++] = ((sum & 0x00000000000f0000) >> 12) | ((sum & 0x00000000f0000000) >> 28); - if(offset > 3) { + if(offset--) { sum -= 0x0000004e00000000; decd->data[i++] = ((sum & 0x000000000f000000) >> 20) | ((sum & 0x0000003c00000000) >> 34); - if(offset > 4) { + if(offset--) { decd->data[i++] = ((sum & 0x0000000300000000) >> 26) | ((sum & 0x0000fc0000000000) >> 42); - if(offset > 5) { + if(offset--) { sum -= 0x004e000000000000; decd->data[i] = ((sum & 0x0000030000000000) >> 34) | ((sum & 0x003f000000000000) >> 48); } diff --git a/64/base14.h b/64/base14.h index b8dc4cd..ce9eb6a 100644 --- a/64/base14.h +++ b/64/base14.h @@ -5,9 +5,9 @@ #define B14BUFSIZ 16384 struct LENDAT { uint8_t* data; - uint64_t len; + int64_t len; }; typedef struct LENDAT LENDAT; -LENDAT* encode(const uint8_t* data, const uint64_t len); -LENDAT* decode(const uint8_t* data, const uint64_t len); +LENDAT* encode(const uint8_t* data, const int64_t len); +LENDAT* decode(const uint8_t* data, const int64_t len); diff --git a/base16384.h b/base16384.h index 5082841..4fa5b3b 100644 --- a/base16384.h +++ b/base16384.h @@ -9,4 +9,3 @@ #ifdef CPUBIT64 #include "./64/base14.h" #endif -