2014-08-31 162 views
-4

我已经复制了这段代码,通过C++中的串口写入数据。它工作正常,但我现在需要的是知道如何将字符串转换为字节数组,因为我想写几个字符串与arduino进行通信。我在这里粘贴代码:通过C++中的串口发送数据

#include <windows.h> 
#include <stdio.h> 

int main() 
{ 
// Define the five bytes to send ("hello") 
char bytes_to_send[5]; 
bytes_to_send[0] = 104; 
bytes_to_send[1] = 101; 
bytes_to_send[2] = 108; 
bytes_to_send[3] = 108; 
bytes_to_send[4] = 111; 

// Declare variables and structures 
HANDLE hSerial; 
DCB dcbSerialParams = {0}; 
COMMTIMEOUTS timeouts = {0}; 

// Open the highest available serial port number 
fprintf(stderr, "Opening serial port..."); 
hSerial = CreateFile(
      "\\\\.\\COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL, 
      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
if (hSerial == INVALID_HANDLE_VALUE) 
{ 
     fprintf(stderr, "Error\n"); 
     return 1; 
} 
else fprintf(stderr, "OK\n"); 

// Set device parameters (38400 baud, 1 start bit, 
// 1 stop bit, no parity) 
dcbSerialParams.DCBlength = sizeof(dcbSerialParams); 
if (GetCommState(hSerial, &dcbSerialParams) == 0) 
{ 
    fprintf(stderr, "Error getting device state\n"); 
    CloseHandle(hSerial); 
    return 1; 
} 

dcbSerialParams.BaudRate = CBR_38400; 
dcbSerialParams.ByteSize = 8; 
dcbSerialParams.StopBits = ONESTOPBIT; 
dcbSerialParams.Parity = NOPARITY; 
if(SetCommState(hSerial, &dcbSerialParams) == 0) 
{ 
    fprintf(stderr, "Error setting device parameters\n"); 
    CloseHandle(hSerial); 
    return 1; 
} 

// Set COM port timeout settings 
timeouts.ReadIntervalTimeout = 50; 
timeouts.ReadTotalTimeoutConstant = 50; 
timeouts.ReadTotalTimeoutMultiplier = 10; 
timeouts.WriteTotalTimeoutConstant = 50; 
timeouts.WriteTotalTimeoutMultiplier = 10; 
if(SetCommTimeouts(hSerial, &timeouts) == 0) 
{ 
    fprintf(stderr, "Error setting timeouts\n"); 
    CloseHandle(hSerial); 
    return 1; 
} 

// Send specified text (remaining command line arguments) 
DWORD bytes_written, total_bytes_written = 0; 
fprintf(stderr, "Sending bytes..."); 
if(!WriteFile(hSerial, bytes_to_send, 5, &bytes_written, NULL)) 
{ 
    fprintf(stderr, "Error\n"); 
    CloseHandle(hSerial); 
    return 1; 
} 
fprintf(stderr, "%d bytes written\n", bytes_written); 

// Close serial port 
fprintf(stderr, "Closing serial port..."); 
if (CloseHandle(hSerial) == 0) 
{ 
    fprintf(stderr, "Error\n"); 
    return 1; 
} 
fprintf(stderr, "OK\n"); 

// exit normally 
return 0; 
} 

这里是我想改变部分:

// Define the five bytes to send ("hello") 
char bytes_to_send[5]; 
bytes_to_send[0] = 104; 
bytes_to_send[1] = 101; 
bytes_to_send[2] = 108; 
bytes_to_send[3] = 108; 
bytes_to_send[4] = 111; 

我想用我自己的字符串,并将其转换成字节,这样我可以送的方法他们通过串口。

+0

有一个'std :: string'类包含在C++标准库中(这个库里有很多有用的容器和算法)。 'std :: string'类具有提取单个字符(字节)或提取内容为字节数组的功能。希望有所帮助。 – patchwork 2014-08-31 10:09:53

回答

0

字符串已经是一个字节数组。

char bytes_to_send[] = "hello"; 
-1

当我可以测试它与arduino,它工作正常,当我刚刚发送字符串。

感谢您的答案。