{"_id":"5528553ad9e1db2d00cd9292","__v":22,"category":{"_id":"55284ed68962f339009a67e1","__v":6,"pages":["552854af60c60f230003fb96","5528553ad9e1db2d00cd9292","55286c7d391a362500d9b3f5","55290f5bceedaa0d00bc5c5b","56d1fb3d93f76e0b00bbc5e2","56d1fb6293f76e0b00bbc5e4"],"project":"552829408962f339009a678d","version":"552829408962f339009a6790","sync":{"url":"","isSync":false},"reference":false,"createdAt":"2015-04-10T22:29:42.627Z","from_sync":false,"order":9,"slug":"protocol","title":"MTProto v2"},"project":"552829408962f339009a678d","user":"55282916d9e1db2d00cd923c","version":{"_id":"552829408962f339009a6790","project":"552829408962f339009a678d","__v":26,"createdAt":"2015-04-10T19:49:20.516Z","releaseDate":"2015-04-10T19:49:20.516Z","categories":["552829418962f339009a6791","55284ed68962f339009a67e1","55286c73391a362500d9b3f4","552918f6b316811900149f59","5529b255d739240d00a3483e","553287590a578a0d008d4ff5","55329385e7d1fa0d003fc946","5550b55200420e0d00d1312f","55525fca953c9c0d00f507d7","559199695631432f002d358a","559d8d96980b801700d5ec7e","55c5e833cccdeb2d004e24b9","55d76504f662951900fc0e7d","55ea213cc62aa02f008229cd","56157b750f5ed00d00483dd8","561981fbac0924170069f4e8","561b8b1ea430930d0037ea67","563417428b86331700b488ca","56cd785bface161300dae0ec","56cdcc6e70db8a15006395f4","56cdf1b749abf10b0036a34a","56cedc8ce50c9c1b00830423","56e97ba8d825061900d1ac83","570d505228e6900e00477229","573614ca2ab52e1700c8e851","57d556a2496a3117004d70cf"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"","version_clean":"1.0.0","version":"1.0"},"parentDoc":null,"updates":[],"next":{"pages":[],"description":""},"createdAt":"2015-04-10T22:56:58.636Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"settings":"","results":{"codes":[]},"auth":"required","params":[],"url":""},"isReference":false,"order":1,"body":"Type encoding actually is taken from protobuf, but we describe it in details. Protocol encoding has this serialization primitives:\n\n``varint`` - unsigned integer\n\nEach byte in a varint, except the last byte, has the most significant bit (msb) set – this indicates that there are further bytes to come. The lower 7 bits of each byte are used to store the two's complement representation of the number in groups of 7 bits, least significant group first.\n\n``int`` - signed 32bit integer\n\nint value is encoded as 4-byte big endian signed integer\n\n``long`` - signed 64bit intenger\n\nlong value is encoded as 8-byte big endian signed integer\n\n``byte`` - unsigned byte\n\nbyte value is encoded as single big endian byte\n\n``bytes`` - byte array\n\nbytes is encoded as varint of bytes length and raw bytes\n\n``longs`` - long array\n\nbytes is encoded as varint of longs length and then raw long values\n\n``string`` - byte array that contains UTF-8 text\n\nstring is encoded in the same way as bytes\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"Structure\"\n}\n[/block]\nStructures are definition\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<struct_name> {\\n HEADER = <header_id>; // optional\\n <arg1>: <argType1>\\n <arg3>: <argType2>\\n ....\\n <argN>: <argTypeN>\\n}\",\n      \"language\": \"text\"\n    }\n  ]\n}\n[/block]\nIf structure contains HEADER than serialize HEADER value as single unsigned byte.\nAfter HEADER scrutrure parameters is encoded in order from structure description.","excerpt":"","slug":"encoding","type":"basic","title":"Encoding"}
Type encoding actually is taken from protobuf, but we describe it in details. Protocol encoding has this serialization primitives: ``varint`` - unsigned integer Each byte in a varint, except the last byte, has the most significant bit (msb) set – this indicates that there are further bytes to come. The lower 7 bits of each byte are used to store the two's complement representation of the number in groups of 7 bits, least significant group first. ``int`` - signed 32bit integer int value is encoded as 4-byte big endian signed integer ``long`` - signed 64bit intenger long value is encoded as 8-byte big endian signed integer ``byte`` - unsigned byte byte value is encoded as single big endian byte ``bytes`` - byte array bytes is encoded as varint of bytes length and raw bytes ``longs`` - long array bytes is encoded as varint of longs length and then raw long values ``string`` - byte array that contains UTF-8 text string is encoded in the same way as bytes [block:api-header] { "type": "basic", "title": "Structure" } [/block] Structures are definition [block:code] { "codes": [ { "code": "<struct_name> {\n HEADER = <header_id>; // optional\n <arg1>: <argType1>\n <arg3>: <argType2>\n ....\n <argN>: <argTypeN>\n}", "language": "text" } ] } [/block] If structure contains HEADER than serialize HEADER value as single unsigned byte. After HEADER scrutrure parameters is encoded in order from structure description.