在C語言中有沒有計算以下東歐字符「‰
」所需字節數的方法? sizeof
功能將無法正常工作,因爲它顯示我的標準尺寸爲char
。我知道這個字符需要3個字節,但是我需要以編程方式來獲取?有沒有辦法計算以下東歐字符所需的字節數?
回答
代碼:
printf("%d\n",(int)strlen("‰"));
返回值:
3
這將'size_t'值打印爲'int',這不是很好。它還假定源代碼使用UTF-8,編譯器不重新編碼字符串。 – unwind 2013-03-01 08:47:08
hmm。使演員明確,並仍然很快,也許''printf(「%c \ n」,(char)strlen()+'0');'會是一個很好的妥協? – 2013-03-01 09:12:14
'%d'用於'int',而不是'size_t',這是'strlen()'返回的結果。此外,編譯器可能不會有意支持源代碼中的非ASCII字符。 – 2013-03-01 10:47:14
正如亞希建議你可以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;
}
'%d'是用於'int',而不是'size_t',這是'strlen()'返回的結果。此外,編譯器可能不會有意支持源代碼中的非ASCII字符。 – 2013-03-01 10:47:56
@AlexeyFrunze,我認爲你的評論是由Aki發佈的答案;),我沒有在這個例子中使用strlen – 2013-03-01 10:58:45
謝謝David RF – bluelurker 2013-03-01 12:15:09
的sizeof可以工作。我想用:
unsigned char a[]="‰";
size_t s=sizeof(a)-1;
size_t t=strlen((char*)a);
但是在VC2012 s
和t
是1.與a[0]
是137 另外,我覺得什麼都在尋找正是mblen()
- 1. 有沒有辦法快速計算字符串的簽名以幫助檢測字符串更改?
- 2. 有沒有辦法計算ViewState MAC?
- 3. 有沒有辦法顯示大於列中數字的計數(*)?
- 4. 有沒有辦法計算將幀A轉換爲幀B所需的CGAffineTransform?
- 5. 有誰知道如何計算字符串中的字節數?
- 6. 有沒有辦法檢測字母數字Unicode符號?
- 7. 有沒有辦法根據列表中的所有數字來檢查數字?
- 8. 有沒有辦法在android中計算字符串高度/重量?
- 9. 有沒有辦法將java中的字符串或字符字段轉換爲數學運算符?
- 10. 有沒有辦法讓PHP輸出可用的所有字符數組?
- 11. 有沒有辦法檢查數組中所有元素中的字符?
- 12. 如何計算字符串中所有數字的總和
- 13. 計算字符串中所有字母的出現次數PHP
- 14. PHP字符串:有沒有辦法來計算的字符串前面的空格?
- 15. 有沒有辦法從cmd字符串複製字符串?
- 16. 有沒有辦法從字符串中刪除字符? Java
- 17. 有沒有什麼辦法區分字符和數字字符串
- 18. 如何計算MySQL中所有行中的所有字符?
- 19. 有沒有辦法在所有字段中替換字符或字符串而不寫入每個字段?
- 20. 計算字符串中的所有字符
- 21. 有沒有辦法去除,除了字母,數字的一切,「 - 」從字符串
- 22. 有沒有辦法在C#中訪問字符串數組中的字符串?
- 23. 在PHP字符串中計算所有數字
- 24. 有沒有辦法獲得函數的「文檔字符串」?
- 25. 有沒有辦法使用tesseract單個數字的數字?
- 26. 有沒有辦法對R中有數字的字符串進行排序?
- 27. 有沒有辦法計算執行的IL指令的數量?
- 28. 有沒有辦法讓我在C#中留下一個數字?
- 29. 沒有輸出計算字符串字符的代碼
- 30. 有沒有辦法計算freebase MQL查詢的結果數量?
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
也許你想要使用'UTF-8'編碼的大小?請注意,正如JoachimPileborg所說,這不是使用的內部編碼。 – 2013-03-01 07:13:24
'if(x <(1 << 7))return 1;如果(x <(1 << 13))返回2; return 3;'是_I think_,正確的UTF-8(其中'x'是代碼點)。 – 2013-03-01 07:15:42