• 6386阅读
  • 3回复

linux 串口通信 [复制链接]

上一主题 下一主题
离线brightcat1
 
只看楼主 倒序阅读 楼主  发表于: 2008-10-05
— 本帖被 XChinux 执行加亮操作(2008-10-05) —
请问怎样在linux里向串口发送16进制数,在linux环境下对串口的读写用write和read函数来实现,而write函数的具体形式为:
int _write(
  int fd,
  const void *buffer,
  unsigned int count
);
fd
File descriptor of file into which data is written.
buffer
Data to be written.
count
Number of bytes.
我只试过直接发送一个字符串,不知是否有谁以16进制数发送过。。。
还请大侠帮帮忙
[ 此贴被XChinux在2008-10-06 21:09重新编辑 ]
离线guoyun_he

只看该作者 1楼 发表于: 2008-10-06
你把要发送的数据转换成为16进制的不就行了嘛!
  1. static bool _is_hex( char c )
  2. {
  3.     return (((c >= '0') && (c <= '9')) ||
  4.         ((c >= 'A') && (c <= 'F')) ||           
  5.         ((c >= 'a') && (c <= 'f')));
  6. }
  7. static int _from_hex( char c )
  8. {
  9.     int ret = 0;
  10.     if ( ( c >= '0' ) && ( c <= '9' ) )
  11.     {
  12.         ret = (c - '0');
  13.     }
  14.     else if ( (c >= 'a') && (c <= 'f') )
  15.     {
  16.         ret = (c - 'a' + 0x0a);
  17.     }
  18.     else if ((c >= 'A') && (c <= 'F'))
  19.     {
  20.         ret = (c - 'A' + 0x0A);
  21.     }
  22.     return ret;
  23. }
离线brightcat1
只看该作者 2楼 发表于: 2008-10-06
楼上是把要发送的字符串里的字符转换成十六进制,且函数返回的是一个整型,在write函数中的参数是一个char*型,可能是没有理会我的意思,或者函数没写完整。
我还想问下下面的语句算不算是以十六进制发送:
char buf[20];
buf[0]=0x1;
buf[1]=0x2e;
buf[2]=0x3f;
buf[3]=0xef;
buf[4]='\0';
write(fd,buf,4);
如果算是的话,下面的语句是否也行
char buf[20];
buf[0]=1;
buf[1]=46;
buf[2]=63;
buf[3]=239;
buf[4]='\0';
write(fd,buf,4);
因为我验证过,若:
char a=0xef;
char b=239;
则a与b是相等的,两者的ASCⅡ码是相同的
不知有谁试过没?
[ 此贴被brightcat1在2008-10-06 16:02重新编辑 ]
离线brightcat1
只看该作者 3楼 发表于: 2008-10-07
呵呵!
完全可以!
结账
快速回复
限100 字节
 
上一个 下一个