2012-04-08 58 views
0

我想連接與常規字符空字符,像這樣:追加空字符以常規字符

NSString *message = @"ABC"; 
NSUInteger length = [message length]; 
char char4 = length; 
char char3 = length >> 8; 
char char2 = length >> 16; 
char char1 = length >> 24; 
message = [NSString stringWithFormat:@"%c%c%c%c%@",char4,char3,char2,char1,message]; 

的問題是,串停留在長度爲4(看起來像¿ABC)。如何編輯此代碼以便空字符也附加到字符串?

在答覆標誌的評論

我想在這裏做的是字符串的長度追加到字符串,而不是以數字格式的開始,但在ASCII字符格式(幾乎像一個基地256號碼)。我將使用格式@"%04c%@",length,message,問題是生成的字符串將是000¿ABC,並且零有ascii值(精確到十進制48),這樣就會失敗。具有十進制值0的ASCII字符是空字符(\0),所以我必須使用該字符而不是0.必須使用那些前導空字符。

爲了什麼,我試圖完成的目的,下面的代碼工作

NSUInteger length = [message length]; 
char char4 = length; 
char char3 = length >> 8; 
char char2 = length >> 16; 
char char1 = length >> 24; 

if (char4 == '\0') 
    message = [NSString stringWithFormat:@"\0%@",message]; 
else 
    message = [NSString stringWithFormat:@"%c%@",char4,message]; 

if (char3 == '\0') 
    message = [NSString stringWithFormat:@"\0%@",message]; 
else 
    message = [NSString stringWithFormat:@"%c%@",char3,message]; 

if (char2 == '\0') 
    message = [NSString stringWithFormat:@"\0%@",message]; 
else 
    message = [NSString stringWithFormat:@"%c%@",char2,message]; 

if (char1 == '\0') 
    message = [NSString stringWithFormat:@"\0%@",message]; 
else 
    message = [NSString stringWithFormat:@"%c%@",char1,message]; 

但是,如果任何人都可以有所貢獻更短或更直觀,那簡直太好了。

+1

char變量是長度上的移位,與字符串的值沒有任何關係,並且將0放入字符串中將不會執行任何操作(字符串以\ 0結尾)您真的想要做什麼? – Mark 2012-04-08 21:50:25

+0

您可以將'NULL'放入char數組中,但您必須自己記錄長度以及編寫自己的打印例程,因爲大多數C標準庫函數都依賴於以NULL結尾的字符串。 – hellork 2012-04-08 21:54:51

+0

請注意,@ shellork:ASCII NUL'\ 0'U + 0000是一個字符代碼; NULL是一個空指針常量。這些都不是一回事。 – 2012-04-08 22:00:10

回答

3

不要這樣做。這是一個壞主意。例如,NSString在概念上是建立在16位Unicode字符上的,但是你試圖預先存儲字節。請注意,沒有什麼能保證NSString的內部表示是UTF-16或任何其他特定的編碼。在任何情況下,當字符串被寫出時,必須將其轉換爲任何編碼,並且不太可能以您可以預測的方式保留長度前綴。

在特定的編碼中,使用長度在前4位(或者8位對於64位長度更好)的字節後接字符串的NSData。我推薦UTF-8。

+0

是的,我不知道爲什麼我沒有想到繼續前進,只是使用NSData,因爲這正是我把NSString變成了什麼。謝謝 – 2012-04-08 23:04:08