/******************************************************************************
Welcome to GDB Online.
GDB online is an online compiler and debugger tool for C, C++, Python, PHP, Ruby,
C#, OCaml, VB, Perl, Swift, Prolog, Javascript, Pascal, COBOL, HTML, CSS, JS
Code, Compile, Run and Debug online from anywhere in world.
*******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <inttypes.h>
uint16_t* manchester_encoder(char* string, size_t length) {
uint16_t* encoded
= malloc(length
* 2 * sizeof(uint16_t)); uint16_t* encoded_ptr = encoded;
uint8_t bit=0;
for(size_t x = 0; x < length; x++,encoded++) {
for(int8_t y=7; y>=0; y--) {
bit=0;
if(y%2!=0) { // Impares
bit=(string[x] & (1 << y));
if(bit==0) {
*encoded = *encoded & (0<<((y*2)+1));
*encoded = *encoded | (1<<(y*2));
} else {
*encoded = *encoded | (1<<((y*2)+1));
*encoded = *encoded & (0<<(y*2));
}
} else { // Pares
bit=(string[x] & (1 << y));
if(bit==0) {
*encoded = *encoded & (0<<y);
*encoded = *encoded | (1<<(y+1));
} else {
*encoded = *encoded | (1<<y);
*encoded = *encoded & (0<<(y+1));
}
}
}
}
return encoded_ptr;
}
char* manchester_decoder(uint16_t* manchester, size_t length) {
char* decoded
= malloc(length
/ 2 * sizeof(uint8_t)); char* decoded_ptr = decoded;
for(size_t x = 0; x < length / 2; x++) {
uint8_t bit = 0;
for(int8_t y = 7; y >= 0; y--) {
if(y%2!=0) // Impares
bit= (manchester[x] & (1 << (y * 2 + 1)));
else // Pares
bit = (manchester[x] & (1 << y));
if(bit==0)
*decoded = *decoded & (0 << (y));
else
*decoded = *decoded | (1 << (y));
}
}
return decoded_ptr;
}
int main()
{
char *mensaje = "PRUEBA";
uint16_t *encoded = NULL;
char *decoded = NULL;
encoded
=manchester_encoder
(mensaje
,strlen(mensaje
));
for(size_t x
=0; x
<=strlen(mensaje
)*2; x
++) { }
decoded
=manchester_decoder
(encoded
,strlen(mensaje
)*2);
return 0;
}
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKV2VsY29tZSB0byBHREIgT25saW5lLgogIEdEQiBvbmxpbmUgaXMgYW4gb25saW5lIGNvbXBpbGVyIGFuZCBkZWJ1Z2dlciB0b29sIGZvciBDLCBDKyssIFB5dGhvbiwgUEhQLCBSdWJ5LAogIEMjLCBPQ2FtbCwgVkIsIFBlcmwsIFN3aWZ0LCBQcm9sb2csIEphdmFzY3JpcHQsIFBhc2NhbCwgQ09CT0wsIEhUTUwsIENTUywgSlMKICBDb2RlLCBDb21waWxlLCBSdW4gYW5kIERlYnVnIG9ubGluZSBmcm9tIGFueXdoZXJlIGluIHdvcmxkLgoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8aW50dHlwZXMuaD4KCnVpbnQxNl90KiBtYW5jaGVzdGVyX2VuY29kZXIoY2hhciogc3RyaW5nLCBzaXplX3QgbGVuZ3RoKSB7Cgl1aW50MTZfdCogZW5jb2RlZCA9IG1hbGxvYyhsZW5ndGggKiAyICogc2l6ZW9mKHVpbnQxNl90KSk7Cgl1aW50MTZfdCogZW5jb2RlZF9wdHIgPSBlbmNvZGVkOwoJdWludDhfdCBiaXQ9MDsKCWZvcihzaXplX3QgeCA9IDA7IHggPCBsZW5ndGg7IHgrKyxlbmNvZGVkKyspIHsKCQlmb3IoaW50OF90IHk9NzsgeT49MDsgeS0tKSB7CgkJCWJpdD0wOwoJCQlpZih5JTIhPTApIHsgLy8gSW1wYXJlcwoJCQkJYml0PShzdHJpbmdbeF0gJiAoMSA8PCB5KSk7CgkJCQlpZihiaXQ9PTApIHsKCQkJCQkqZW5jb2RlZCA9ICplbmNvZGVkICYgKDA8PCgoeSoyKSsxKSk7CgkJCQkJKmVuY29kZWQgPSAqZW5jb2RlZCB8ICgxPDwoeSoyKSk7CgkJCQl9IGVsc2UgewoJCQkJCSplbmNvZGVkID0gKmVuY29kZWQgfCAoMTw8KCh5KjIpKzEpKTsKCQkJCQkqZW5jb2RlZCA9ICplbmNvZGVkICYgKDA8PCh5KjIpKTsKCQkJCX0KCQkJfSBlbHNlIHsgLy8gUGFyZXMKCQkJCWJpdD0oc3RyaW5nW3hdICYgKDEgPDwgeSkpOwoJCQkJaWYoYml0PT0wKSB7CgkJCQkJKmVuY29kZWQgPSAqZW5jb2RlZCAmICgwPDx5KTsKCQkJCQkqZW5jb2RlZCA9ICplbmNvZGVkIHwgKDE8PCh5KzEpKTsKCQkJCX0gZWxzZSB7CgkJCQkJKmVuY29kZWQgPSAqZW5jb2RlZCB8ICgxPDx5KTsKCQkJCQkqZW5jb2RlZCA9ICplbmNvZGVkICYgKDA8PCh5KzEpKTsKCQkJCX0KCQkJfQoJCX0KCX0KCXJldHVybiBlbmNvZGVkX3B0cjsKfQoKY2hhciogbWFuY2hlc3Rlcl9kZWNvZGVyKHVpbnQxNl90KiBtYW5jaGVzdGVyLCBzaXplX3QgbGVuZ3RoKSB7CgljaGFyKiBkZWNvZGVkID0gbWFsbG9jKGxlbmd0aCAvIDIgKiBzaXplb2YodWludDhfdCkpOwoJY2hhciogZGVjb2RlZF9wdHIgPSBkZWNvZGVkOwoJZm9yKHNpemVfdCB4ID0gMDsgeCA8IGxlbmd0aCAvIDI7IHgrKykgewoJCXVpbnQ4X3QgYml0ID0gMDsKCQlmb3IoaW50OF90IHkgPSA3OyB5ID49IDA7IHktLSkgewoKCQkJaWYoeSUyIT0wKSAvLyBJbXBhcmVzCgkJCQliaXQ9IChtYW5jaGVzdGVyW3hdICYgKDEgPDwgKHkgKiAyICsgMSkpKTsKCgkJCWVsc2UgLy8gUGFyZXMKCQkJCWJpdCA9IChtYW5jaGVzdGVyW3hdICYgKDEgPDwgeSkpOwoKCQkJaWYoYml0PT0wKQoJCQkJKmRlY29kZWQgPSAqZGVjb2RlZCAmICgwIDw8ICh5KSk7CgkJCWVsc2UKCQkJCSpkZWNvZGVkID0gKmRlY29kZWQgfCAoMSA8PCAoeSkpOwoJCX0KCX0KCXJldHVybiBkZWNvZGVkX3B0cjsKfQoKaW50IG1haW4oKQp7CgljaGFyICptZW5zYWplID0gIlBSVUVCQSI7Cgl1aW50MTZfdCAqZW5jb2RlZCA9IE5VTEw7CgljaGFyICpkZWNvZGVkID0gTlVMTDsKCglwcmludGYoIiVzIixtZW5zYWplKTsKCgllbmNvZGVkPW1hbmNoZXN0ZXJfZW5jb2RlcihtZW5zYWplLHN0cmxlbihtZW5zYWplKSk7CgoJcHJpbnRmKCJcbkVuY29kZWQ6IFxuIik7CgoJZm9yKHNpemVfdCB4PTA7IHg8PXN0cmxlbihtZW5zYWplKSoyOyB4KyspIHsKCQlwcmludGYoIiUwNHgiLGVuY29kZWQpOwoJfQoKCXByaW50ZigiXG5EZWNvZGVkOiBcbiIpOwoKCWRlY29kZWQ9bWFuY2hlc3Rlcl9kZWNvZGVyKGVuY29kZWQsc3RybGVuKG1lbnNhamUpKjIpOwoKCXByaW50ZigiJXMiLGRlY29kZWQpOwoKCXJldHVybiAwOwp9