Во-первых, при таком подходе могут быть проблемы с кодировкой. Не любые символы можно писать в теле запроса, всё зависит от Content-encoding. Но точно не знаю, надо пробовать.
Самым надежный способ — честно преобразовать все числа в строки и эти строки записать в запрос, разделяя, например, пробелом. Не знаю, подходит ли это решение к вашей задаче, но так будет проще и проверять корректность запроса, и принимать данные на сервере.
Если же делать, как вы пытаетесь (записать в запрос байты, которыми представляются целые числа), то записывать в строку нужно так:
out.write(reinterpret_cast<char*>(binary), bufferLength*sizeof(int));
Тогда запишется массив целиком. А у вас получается, что байты пишутся до тех пор, пока не встретится нулевой байт. А в представлении int-а нулевые байты встречаются часто. В Content_length нужно указать количество байт в теле запроса, т.е. bufferLength*sizeof(int).