Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C(ASCII)从超级终端读取数据_C_Data Structures_Serial Port_Embedded_Structure - Fatal编程技术网

用C(ASCII)从超级终端读取数据

用C(ASCII)从超级终端读取数据,c,data-structures,serial-port,embedded,structure,C,Data Structures,Serial Port,Embedded,Structure,我需要一个帮助来开发一个C代码,从终端读取数据(终端只接受ASCII),并将此ASCII转换为整数。你知道在哪里可以找到这些信息或任何建议吗? 终端应接受用户输入(例如:新温度值)并转换为整数。该整数值将通过接口(RS232接口)传输到内存 示例:消息结构- struct memoryTag1; typedef struct memoryTag1{ char a[10]= {'+','0','2','6','.','5','E','A','\r'}; // first five bits is

我需要一个帮助来开发一个C代码,从终端读取数据(终端只接受ASCII),并将此ASCII转换为整数。你知道在哪里可以找到这些信息或任何建议吗? 终端应接受用户输入(例如:新温度值)并转换为整数。该整数值将通过接口(RS232接口)传输到内存

示例:消息结构-

struct memoryTag1;
typedef struct memoryTag1{
char a[10]= {'+','0','2','6','.','5','E','A','\r'}; // first five bits is the new temperature value (+26.5), two bits (euipment name- EA), carriage reurn.
char b[10]= {'-','0','2','4','.','5','E','B','\r'};
char c[8]= {'+','0','2','0','E','C','\r'};
}Memory1;

提前感谢。

超级终端是一个应用程序而不是一个设备,您不能“从超级终端读取数据”,它从串行端口读取数据。您需要询问的是如何从串行端口读取数据

在大多数平台上,您可以通过标准流I/O函数读取数据,例如,
fopen
fread
fscanf
,尽管这些函数可能无法提供您所需的控制或灵活性;在这种情况下,您将需要使用较低级别的OS API调用

在Windows中,您可以执行以下最简单的操作:

double data;
char equip[16] ;
FILE* portfp = 0 ;

system( "mode com1: baud=9600 parity=n data=8 stop=1" ) ;

portfp = fopen( "com1:", "r" ) ;
if( portfp != 0 )
{
    fscanf( portfp, "%f%s", &data, equip ) ;
    fclose(portfp ) ;
}

Win32 API具有较低的级别和级别,但并不那么简单。NET framework有一个串行I/O类,使用起来比Win32简单得多,但您不能在C中使用它-您需要C#或C++/CLI。

实际的读取在很大程度上取决于您的平台。值转换相当简单。作为旁注,您似乎混淆了位和字节。您已经收到的答案有什么问题?请停止反复发布几乎完全相同的问题,忽略答案。我将更正该消息结构,但用户如何输入与消息结构匹配的新温度值。稍后它将如何通过串行接口传输??当输入数据有小数点时,您确定要转换为整数吗?@unwind此问题是关于读取的,那是关于写入的(可能不完全清楚)。如果用户希望通过终端输入温度值(终端仅接受ASCII)那么怎么做呢???@user1647229你已经重复了你自己,第二次就没有意义了。如果输入为
“+026.5EA”
,则上述代码将以
data=26.5
equipment=“EA”
结束。如果这不是你所期望的答案,那么在这个上下文中考虑你的问题并改进它,因为目前还不清楚。