diff --git a/cores/arduino/USB/USBCore.cpp b/cores/arduino/USB/USBCore.cpp
index cd356d5781be11f7b93934e0e9e38956316393ba..4277bc4e394ab77580a2d93dd92998826a8b83ab 100644
--- a/cores/arduino/USB/USBCore.cpp
+++ b/cores/arduino/USB/USBCore.cpp
@@ -90,18 +90,18 @@ bool USBDeviceClass::sendStringDescriptor(const uint8_t *string, uint8_t maxlen)
 	if (maxlen < 2)
 		return false;
 
-	uint16_t buff[maxlen/2];
-	int l = 1;
+	uint8_t buffer[maxlen];
+	buffer[0] = 0x03;
+	buffer[1] = strlen(string) * 2 + 2;
 
-	maxlen -= 2;
-	while (*string && maxlen>0)
-	{
-		buff[l++] = (uint8_t)(*string++);
-		maxlen -= 2;
+	uint8_t i;
+	for (i = 2; i < maxlen && *string; i++) {
+		buffer[i++] = *string++;
+		if (i == maxlen) break;
+		buffer[i] = 0;
 	}
-	buff[0] = (3<<8) | (l*2);
 
-	return USBDevice.sendControl((uint8_t*)buff, l*2);
+	return USBDevice.sendControl(buffer, i);
 }
 
 bool _dry_run = false;