2015-09-25 135 views
0

吹是的Dalvik/VM/OO結構StringObject的定義/ Object.h爲什麼StringObject的方法字符()返回字符串的字符[]作爲U2 *

struct StringObject : Object { 
/* variable #of u4 slots; u8 uses 2 slots */ 
u4    instanceData[1]; 

/** Returns this string's length in characters. */ 
int length() const; 

/** 
* Returns this string's length in bytes when encoded as modified UTF-8. 
* Does not include a terminating NUL byte. 
*/ 
int utfLength() const; 

/** Returns this string's char[] as an ArrayObject. */ 
ArrayObject* array() const; 

/** Returns this string's char[] as a u2*. */ 
const u2* chars() const; 
}; 

我如何使用StringObject來打印實際的字符串?我已經嘗試過,並且無法從方法chars()中獲取字符串。

而且,爲什麼StringObject的方法chars()返回字符串的char []作爲u2 *?

有什麼建議嗎?提前致謝。

+1

Dalvik使用utf-16編碼字符串,因爲JAVA使用utf-16編碼字符串。在文件dalvik/vm/UtfString.cpp中有一個名爲convertUtf16ToUtf8(...)的方法,將utf16字符串(u2 *)轉換爲utf8 char *。 – Dustin

回答

0

這是一個utf-16編碼的字符串,所以每個代碼單元都是16位。因此,u2 *。

+0

我怎麼能打印到系統日誌?我使用ALOG(LOG_WARN,..「%s」...),但只是得到字符串的第一個字符。 – Dustin

+0

UTF-16和UTF-32編碼使用nul字節對小碼進行編碼,所以它們不能用C中的printf打印。那麼爲什麼Dalvik會在utf-16中編碼字符串呢? – Dustin

+0

Thans非常!我找到了答案。由於JAVA使用utf-16編碼字符串,因此Dalvik在utf-16中編碼字符串。在文件dalvik/vm/UtfString.cpp中有一個名爲convertUtf16ToUtf8(...)的方法,將utf16字符串(u2 *)轉換爲utf8 char *。 – Dustin

相關問題