次のように、ヌル文字を通常の文字と連結したい:
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
)。null 文字も文字列に追加されるように、このコードを編集するにはどうすればよいですか?
マークのコメントへの返信として
ここでやろうとしているのは、文字列の長さを文字列の先頭に追加することです。数値形式ではなく、ASCII 文字の形式 (ほぼ 256 進数のようなもの) で追加します。私はフォーマットを使用します、@"%04c%@",length,message
問題は、結果の文字列が になり000¿ABC
、ゼロにはASCII値(正確には10進数で48)が含まれるため、目的が無効になることです。10 進値 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];
しかし、誰かがより短いものやより直感的なものに貢献できるなら、それは素晴らしいことです.