Добрый день, столкнулся с проблемой, надеюсь на вашу помощь. На мк стоит http сервер, необходимо со страницы браузера отправлять на него данные при помощи GET запросов. Пакет данных имеет фиксированные параметры: 16 чисел по 8 бит каждое.
Допустим забиваю данные от 0 до 15 и отправляю
Код:
let TransmitBuffer = new Uint8Array(16);
for (var i = 0; i < 16; i++)
{
TransmitBuffer[i] = i;
}
console.log(TransmitBuffer);
// TRANSMIT
let xhr = new XMLHttpRequest();
xhr.open("GET", "work.html?c=" + TransmitBuffer + Math.random(), true);
xhr.responseType = "arraybuffer";
В консоль выводится:
'Uint8Array']
0: 0
1: 1
2: 2
3: 3
4: 4
5: 5
6: 6
7: 7
8: 8
9: 9
10: 10
11: 11
12: 12
13: 13
14: 14
15: 15
buffer: ArrayBuffer(16)
byteLength: 16
byteOffset: 0
length: 16
Symbol(Symbol.toStringTag): "Uint8Array"
[[Prototype]]: TypedArray
Сам пакет имеет вид (в Wireshark):
GET /work.html?c=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,150.888148996449402 HTTP/1.1\r\n
В конце 0.888... это рандомное число, чтобы пакеты не кешировались, насколько я понимаю.
Теперь принимаю на стороне мк (stm32):
Код:
else if(strncmp((char const *)buf,"GET /work.html?c=",17)==0)
{
for(uint8_t i = 0; i < 16; i++)
{
EthReceiveBuffer[i] = buf[i+17];
snprintf(SendStr, 50, "%d = %d\r\n", i, EthReceiveBuffer[i]);
HAL_UART_Transmit(&H_USART_DEBUG, (uint8_t*)SendStr, strlen(SendStr), 100);
}
for(uint8_t i = 0; i < 16; i++)
{
EthReceiveBuffer[i] = buf[i+17] - '0';
snprintf(SendStr, 50, "%d = %d\r\n", i, EthReceiveBuffer[i]);
HAL_UART_Transmit(&H_USART_DEBUG, (uint8_t*)SendStr, strlen(SendStr), 100);
}
}
2 вида приема, но результат все равно один, по сути я принимаю (да и отправляю) строку вида 0,1,2,3...
Полученный результат в консоль:
0 = 48
1 = 44
2 = 49
3 = 44
4 = 50
5 = 44
6 = 51
7 = 44
8 = 52
9 = 44
10 = 53
11 = 44
12 = 54
13 = 44
14 = 55
15 = 44
0 = 0
1 = 252
2 = 1
3 = 252
4 = 2
5 = 252
6 = 3
7 = 252
8 = 4
9 = 252
10 = 5
11 = 252
12 = 6
13 = 252
14 = 7
15 = 252
Принимается число и запятая за ним, но запятую я еще могу убрать, я не могу принять число именно как 8 битное, т.е. если я отправлю число 15, то оно отравится и примется как 1 и 5. Число 100 будет как 1 и 0 и 0.
Как можно отправить и принять именно 8 битный массив, где бит, содержащий число 75 будет принят как 75, а не как 7 и 5?