Skip to content
Snippets Groups Projects
Select Git revision
  • 6b5964762af36835a479ecec272c3c0a57a9d322
  • master default protected
2 results

prepareExperiment.sh

Blame
  • char16.c 2.29 KiB
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    typedef short char16;
    
    #define char_bit1(c) ((c) & 1)
    #define char_bit2(c) (((c) & 2) >> 1)
    #define char_bit3(c) (((c) & 4) >> 2)
    #define char_bit4(c) (((c) & 8) >> 3)
    #define char_bit5(c) (((c) & 16) >> 4)
    #define char_bit6(c) (((c) & 32) >> 5)
    #define char_bit7(c) (((c) & 64) >> 6)
    #define char_bit8(c) (((c) & 128) >> 7)
    #define length(c) ((!char_bit8((c)) || (char_bit8(c) && !char_bit7(c)))? 1 : 2)
    /*
    int length(char c)
    {
      if(!char_bit8(c)) return 1;
      if(char_bit8(c) && !char_bit7(c)) return 1;
      if(char_bit7(c)) return 2;
      if(char_bit6(c)) return 3;
      if(char_bit5(4)) return 4;
      
    }
    */
    int utf8_strlen(char *utf8_string)
    {
      int l = 0;
      while(*utf8_string){
        l += (length(*utf8_string) == 1) ? 1 : 0;
        utf8_string++;
      }
      return l;
    }
    
    char *char16toutf8(char16 *char16_string)
    {
      
    }
    
    
    int char16_strlen(char16 *string)
    {
      int i=0;
      while(string[i]) i++;
      return i;
    }
    
    char16 *utf8tochar16(char *utf8_string)
    {
      char16 c16;
      int i,j;
      int utf8_length = strlen(utf8_string);
      int char16_length = 0;
      char16 *char16_string;
      for(i=0; i < utf8_length; i++)
        char16_length += length(utf8_string[i]);
      
      char16_string = malloc((char16_length + 1)* sizeof(char));
      for(i=0, j=0; i < utf8_length; i++, j++){
        if(length(utf8_string[i]) == 1){
          char16_string[j] = (char16)utf8_string[i];
        }
        if(length(utf8_string[i]) == 2){
          char16_string[j] = utf8_string[i];
          char16_string[j] << 8;
          char16_string[j] += utf8_string[++i];
        }
      }
      char16_string[j] = 0;
      return char16_string;
    }
    
    int main(void)
    {
      int i;
      char string[200];
      char16 *char16_string;
      strcpy(string, "élémentaire");
      /* strcpy(string, "konjunktúra-időszaknál"); */
    
      printf("string = %s\n", string);
      printf("length = %d\n", (int)strlen(string));
      printf("utf8 length = %d\n", (int)utf8_strlen(string));
      for(i=0; i < strlen(string); i++){
        printf("%d\t%c\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\tl=%d\n", i, string[i], (int)string[i], char_bit1(string[i]), char_bit2(string[i]), char_bit3(string[i]), char_bit4(string[i]), char_bit5(string[i]), char_bit6(string[i]), char_bit7(string[i]), char_bit8(string[i]), length(string[i])); 
      }
    
    
      char16_string = utf8tochar16(string);
      printf("char16_strlen = %d\n", char16_strlen(char16_string));
      
    }