2013-03-01 46 views
2

在C語言中有沒有計算以下東歐字符「」所需字節數的方法? sizeof功能將無法正常工作,因爲它顯示我的標準尺寸爲char。我知道這個字符需要3個字節,但是我需要以編程方式來獲取?有沒有辦法計算以下東歐字符所需的字節數?

+2

C有,因爲新的C11標準,四個字符類型:char,wchar_t,char16_t和char32_t。 char是單個字節(可以是有符號或無符號),char16_t總是16位(兩個字節),char32_t是32位(四個字節),wchar_t的大小取決於編譯器。但是,沒有三字節字符類型。如果你想使用超過16位的字符,那麼你最好使用'char32_t',或者使用你自己的轉換函數在'int32_t'中編碼。 – 2013-03-01 07:11:57

+1

也許你想要使用'UTF-8'編碼的大小?請注意,正如JoachimPileborg所說,這不是使用的內部編碼。 – 2013-03-01 07:13:24

+1

'if(x <(1 << 7))return 1;如果(x <(1 << 13))返回2; return 3;'是_I think_,正確的UTF-8(其中'x'是代碼點)。 – 2013-03-01 07:15:42

回答

4

代碼:

printf("%d\n",(int)strlen("‰")); 

返回值:

3 
+1

這將'size_t'值打印爲'int',這不是很好。它還假定源代碼使用UTF-8,編譯器不重新編碼字符串。 – unwind 2013-03-01 08:47:08

+0

hmm。使演員明確,並仍​​然很快,也許''printf(「%c \ n」,(char)strlen()+'0');'會是一個很好的妥協? – 2013-03-01 09:12:14

+1

'%d'用於'int',而不是'size_t',這是'strlen()'返回的結果。此外,編譯器可能不會有意支持源代碼中的非ASCII字符。 – 2013-03-01 10:47:14

1

正如亞希建議你可以strlen的,或者你可以用這種方法計算字節:

#include <stdio.h> 

int fn(const char *s) 
{ 
    int n = 0; 

    if (*s != '\0') { 
     do { 
      n++; 
      s++; 
     } while ((*s & 0xc0) == 0x80); 
    } 
    return n; 
} 

int main(void) 
{ 
    printf("%d\n", fn("‰")); 
    return 0; 
} 
+1

'%d'是用於'int',而不是'size_t',這是'strlen()'返回的結果。此外,編譯器可能不會有意支持源代碼中的非ASCII字符。 – 2013-03-01 10:47:56

+0

@AlexeyFrunze,我認爲你的評論是由Aki發佈的答案;),我沒有在這個例子中使用strlen – 2013-03-01 10:58:45

+0

謝謝David RF – bluelurker 2013-03-01 12:15:09

0

的sizeof可以工作。我想用:

unsigned char a[]="‰"; 
size_t s=sizeof(a)-1; 
size_t t=strlen((char*)a); 

但是在VC2012 st是1.與a[0]是137 另外,我覺得什麼都在尋找正是mblen()

相關問題