consolidate all repos to one for archive
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
all: build run
|
||||
|
||||
debug: buildd run clean
|
||||
|
||||
zip:
|
||||
zip naloga.zip main.c Makefile pretvori.c pretvori.h
|
||||
|
||||
build: main.c pretvori.c pretvori.h
|
||||
gcc -m32 main.c pretvori.c -o demo_pretvori
|
||||
|
||||
buildd: main.c pretvori.c pretvori.h
|
||||
gcc -g -m32 main.c pretvori.c -o demo_pretvori -fsanitize=address -fno-omit-frame-pointer
|
||||
|
||||
run:
|
||||
./demo_pretvori 80
|
||||
|
||||
clean:
|
||||
rm -f demo_pretvori
|
18
semester_4/namenska_programska_oprema/Naloga_1/Vaja_2/main.c
Normal file
18
semester_4/namenska_programska_oprema/Naloga_1/Vaja_2/main.c
Normal file
@@ -0,0 +1,18 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include "pretvori.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
if(argc < 2) {
|
||||
printf("Ni dovolj argumentov");
|
||||
return -1;
|
||||
}
|
||||
|
||||
int unicode = preberiVhod(argv);
|
||||
|
||||
int utf8 = pretvoriZnak(unicode);
|
||||
izpisiZnak(utf8);
|
||||
return 0;
|
||||
}
|
@@ -0,0 +1,90 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include "pretvori.h"
|
||||
|
||||
int preberiVhod(char* cmd[])
|
||||
{
|
||||
unsigned int ret = 0;
|
||||
int len = strlen(cmd[1]);
|
||||
uint8_t hex = 0;
|
||||
|
||||
for (size_t i = 0; i < len; i++)
|
||||
{
|
||||
if(cmd[1][i] >= '0' && cmd[1][i] <= '9')
|
||||
{
|
||||
hex = cmd[1][i] - '0';
|
||||
}
|
||||
else if (cmd[1][i] >= 'A' && cmd[1][i] <= 'F')
|
||||
{
|
||||
hex = cmd[1][i] - 'A' + 10;
|
||||
}
|
||||
ret = ret << 4;
|
||||
ret = ret | hex;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int pretvoriZnak(int znak)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if(znak <= 0x7F)
|
||||
{
|
||||
return znak;
|
||||
}
|
||||
|
||||
if(znak <= 0x7FF)
|
||||
{
|
||||
//110xxxxx10xxxxxx
|
||||
ret = 0b1100000010000000;
|
||||
uint32_t mask1 = 0b111111;
|
||||
ret = ret | (znak & mask1);
|
||||
uint32_t mask2 = 0b1111100000000;
|
||||
ret = ret | ((znak << 2) & mask2);
|
||||
return ret;
|
||||
}
|
||||
|
||||
//if((znak >> 13) == 0b110)
|
||||
|
||||
|
||||
if(znak <= 0xFFFF)
|
||||
{
|
||||
//1110xxxx10xxxxxx10xxxxxx
|
||||
ret = 0b111000001000000010000000;
|
||||
uint32_t mask1 = 0b111111;
|
||||
ret = ret | (znak & mask1);
|
||||
uint32_t mask2 = 0b11111100000000;
|
||||
ret = ret | ((znak << 2) & mask2);
|
||||
uint32_t mask3 = 0b11110000000000000000;
|
||||
ret = ret | ((znak << 4) & mask3);
|
||||
|
||||
return ret;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void izpisiZnak(int znak)
|
||||
{
|
||||
printf("UTF-8 binarno: ");
|
||||
|
||||
int firstZero = 0;
|
||||
if ( znak <= 0xFF ) firstZero = 7;
|
||||
else if (znak <= 0xFFFF ) firstZero = 15;
|
||||
else if (znak <= 0xFFFFFF ) firstZero = 23;
|
||||
|
||||
for (int i = firstZero; i >= 0; i--)
|
||||
{
|
||||
// Z bitshiftanjem pogledam ali je na mestu 1 ce je dobim neko stevilo vecje od 1 in zapisem 1
|
||||
int j = znak & (1 << i);
|
||||
printf("%d", (j>0)?1:0);
|
||||
if(i % 4 == 0) printf(" ");
|
||||
}
|
||||
|
||||
printf("\nUTF-8 hex: %X", znak);
|
||||
|
||||
printf("\n");
|
||||
}
|
@@ -0,0 +1,8 @@
|
||||
#ifndef PODATKI
|
||||
#define PODATKI
|
||||
|
||||
int preberiVhod(char* cmd[]);
|
||||
int pretvoriZnak(int znak);
|
||||
void izpisiZnak(int znak);
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user