私はJavaによって生成されるようSAMERで想定しています。
基本的に: *スペース(0x20の)とチルダ(0x7eの)ASCII文字として扱うとの間にショートカットがある場合(例:\ nは、\ rを、\など)がそう脱出ショートカット *を使用* 文字(8進数)
したがって、上記の\ 377は、1バイト:377オクタルまたは10進数で255です。
"\377\330\377\340 = 255 216 255 224
あなたは、Java/Cプログラムに文字列をコピーし、
Javaコードはになりそうだバイトに変換することができるはずです。
static String escapeBytes(final ByteSequence input) {
final StringBuilder builder = new StringBuilder(input.size());
for (int i = 0; i < input.size(); i++) {
final byte b = input.byteAt(i);
switch (b) {
// Java does not recognize \a or \v, apparently.
case 0x07: builder.append("\\a"); break;
case '\b': builder.append("\\b"); break;
case '\f': builder.append("\\f"); break;
case '\n': builder.append("\\n"); break;
case '\r': builder.append("\\r"); break;
case '\t': builder.append("\\t"); break;
case 0x0b: builder.append("\\v"); break;
case '\\': builder.append("\\\\"); break;
case '\'': builder.append("\\\'"); break;
case '"' : builder.append("\\\""); break;
default:
// Only ASCII characters between 0x20 (space) and 0x7e (tilde) are
// printable. Other byte values must be escaped.
if (b >= 0x20 && b <= 0x7e) {
builder.append((char) b);
} else {
builder.append('\\');
builder.append((char) ('0' + ((b >>> 6) & 3)));
builder.append((char) ('0' + ((b >>> 3) & 7)));
builder.append((char) ('0' + (b & 7)));
}
break;
}
}
return builder.toString();
}
がcom.googleから撮影.protobuf.TextFormatEscaper
このボーナスの質問は:このフォーマットの**目的**は何ですか? バイナリを表示するための事実上の標準は、16進値を表示することです。誰かがなぜ8進数値を表示するのが良い考えだったのでしょうか?さらに怒っているのですが、なぜバイト値をこの奇妙な出力形式の対応するASCII文字に置き換えるのでしょうか? – Alderath