精华内容
下载资源
问答
  • 2016-08-29 18:11:08

    “0d 0a”这两个字符是什么涵义

    其实这是从打字机的概念来的:
    0x0d => /r, carrige return, 指打字头归位的动作
    0x0a => /n, new line, 指打字机上卷一行的动作

    Windows 在行尾使用 CRLF (carriage return/line feed, 0d 0a)
    UNIX 好像只使用 LF(0a)

    0d------回车符号------"/r"

    0a------换行符号------"/n"

    一般在windows系统中两个连用,"/r/n"------0d0a

    更多相关内容
  • 关于STM32串口中 0x0a,0x0d的学习

    千次阅读 多人点赞 2018-12-27 10:12:27
    其中 0D 0A这是自行定义的一种数据帧结束标志,不定义这个不没法判断你这一帧数据什么时候结束了, 0D 0A是什么东西咧,它就是我们的回车键的ASCII码, 0D回车,0A换行 像在windows超级终端里一条数据输入完按回车...

    **

    以STM32正点原子的串口接收中断 服务程序为例:

    **

        void USART1_IRQHandler(void)                	//串口1中断服务程序
        	{
        	u8 Res;
        #ifdef OS_TICKS_PER_SEC	 	//如果时钟节拍数定义了,说明要使用ucosII了.
        	OSIntEnter();    
        #endif
        	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
        		{
        		Res =USART_ReceiveData(USART1);//(USART1->DR);	//读取接收到的数据
    		
    		if((USART_RX_STA&0x8000)==0)//接收未完成
    			{
    			if(USART_RX_STA&0x4000)//接收到了0x0d
    				{
    				if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
    				else USART_RX_STA|=0x8000;	//接收完成了 
    				}
    			else //还没收到0X0D
    				{	
    				if(Res==0x0d)USART_RX_STA|=0x4000;
    				else
    					{
    					USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
    					USART_RX_STA++;
    					if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收	  
    					}		 
    				}
    			}   		 
         } 
    #ifdef OS_TICKS_PER_SEC	 	//如果时钟节拍数定义了,说明要使用ucosII了.
    	OSIntExit();  											 
    #endif
    } 
    

    其中 0D 0A这是自行定义的一种数据帧结束标志,不定义这个不没法判断你这一帧数据什么时候结束了, 0D 0A是什么东西咧,它就是我们的回车键的ASCII码, 0D回车,0A换行 像在windows超级终端里一条数据输入完按回车正好来了个0D 0A,表示数据发完了

    0x0D(asc码是13) 指的是“回车” \r是把光标置于本行行首

    0x0A(asc码是10) 指的是“换行” \n是把光标置于下一行的同一列

    0x0D + 0x0A 回车换行 \r\n把光标置于下一行行首

    \n是换行,英文是linefeed,ASCII码是0xA。

    \r是回车,英文是carriage return ,ASCII码是0xD。

    USART_RX_STA是16位的数据,原子定义了最高位15是接收完成标志位,USART_RX_STA[15]=1时表示接收完成。所以0x8000好理解吧,就是最高位为1其他都为0,跟USART_RX_STA相与,低15位都被置0了只留下最高位即接收完成标志位,所以就可以通过USART_RX_STA&0x8000这样的方式来判断是否接收完成。
    USART_RX_STA与0X3FFF进行与运算是用来确定接收到的数据长度的,USART_RX_STA的每个bit的含义教程里面有详细的讲解。

    下面转自一个解读:
    解读:
    怎么写接收函数?

    只要收到一个字节 stm32会产生中断

    进入中断编写

    //接收状态
    //bit15, 接收完成标志
    //bit14, 接收到0x0d
    //bit13~0, 接收到的有效字节数目
    u16 USART_RX_STA=0; //接收状态标记

    第一步判断标志位是否正的接收到

    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)

    第二步 接收下数据

    Res =USART_ReceiveData(USART1); //读取接收到的数据

    第三步判断标志位USART_RX_STA 上次是否接收完成(上次接收完成了会把标志位置1)

    if((USART_RX_STA&0x8000)==0)//接收未完成

    其中USART_RX_STA 是自己定义的16位变量用于标志接收完成或者接收到0x0d 类似于自己定义了一个寄存器

    第四步 判断标志位USART_RX_STA 上次是否接收到了0xod

    if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始 如果上次接收到了/r(0x0d)这次应该是/n (0x0a)

    else USART_RX_STA|=0x8000; //接收完成了

    否则上次没有接收到0x0d

    if(Res==0x0d)USART_RX_STA|=0x4000; //判断本次是否接收到了0x0d
    else
    {
    USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ; //把接收到的数据存入buf缓存区
    USART_RX_STA++; //记录接收的数据字节数量

    if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收 接收的数据不能无限制的大

    }

    总结
    这样的编程方式其实利用了状态机思想,增强稳定性,减少错误

    本次实验有两个状态bit15接收状态,bit14接收到/r状态

    编程时应该观察两个状态,注意到临界态 切换状态

    首先判断当前接收处于什么状态,而不是盲目的接收

    1、首先观察bit15状态 如果处于接收态应该注意 观察下一个状态bit14 在满足条件时切换bit15

    2、观察bit14状态 如果处于接收到了/r态 再应该判断接收值是否满足 切换bit15态的条件

    如果处于没有接收到\r态,应该判断接收值是否满足切换bit14的条件

    if(USART_RX_STA&0x4000)//上次接收到了0x0d /r

    else USART_RX_STA|=0x8000; 改变接收状态bit15

    if(Res==0x0d) 接收到了/r

    USART_RX_STA|=0x4000; 切换状态bit14

    https://blog.csdn.net/shenlong1356/article/details/79940280
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 彻底搞定回车0d和换行0a

    万次阅读 2017-06-09 14:27:05
    什么是0x0d和0x0a ,可能大部分人都知道是回车和换行字符,但那个是回车,那个是换行?估计很多人都一时说不清楚了--- 也许你不相信,那就调查下周围的同事吧,估计会包含以下字眼“大概。我记得。回车是0x0d吧”...
    什么是0x0d和0x0a
    ,可能大部分人都知道是回车和换行字符,但那个是回车,那个是换行?估计很多人都一时说不清楚了---
    也许你不相信,那就调查下周围的同事吧,估计会包含以下字眼“大概。我记得。回车是0x0d吧”。这次我移植arm-linux C的程序,至VC++,
    发现了很多不同,尤其是这个回车换行浪费我一上午的时间,我决定借此机会彻底搞定他们,
    这两个令人讨厌的家伙。   先说下浪费我一上午的那个东西----
    教训是很重要的,希望大家不要重蹈我的覆辙----,在arm-linux下,写二进制文件,打开文件的时候 这样写就可
    以了fp_wthdisk = fopen(file_pathname,"w");,以w
    格式写就可以了。把这段程序移植到vc++后,发现一旦我向文件写入0x0a,前边就会自动加上0x0d
    ,我以为是我写入数组的问题,反复检查也没有找到毛病,后来同事问我:“你是不是二进制格式写入的文件?”我说:
    “是呀,fwrite w格式,没有问题呀”,后来他说,你试试“wb格式写入一下”
    ,改为wb后,果真就好了,厉害!,我对他竖起了大拇指。  
    看到这里,上边促使我下决心搞清楚回车换行的原因说完了。我想可能有人会犯同样错误的。
    但如果你对以下几个问题,都知晓了,就不必浪费时间,继续看下去了。   1.在Windows XP Visual C++下,按下回车键,系统获得的字符是0x0d
    还是0x0a,还是0x0d和0x0a?
        2.
    回车(0x0d)的作用是回到本行的行首位置,表示本行已经输入完毕,停留在最后一个位置,还是光标转移到下一行的起始位置?
        1.的答案是仅获得字符 
    0x0d    2.
    答案是回车的作用只是移动光标至该行的起始位置    注意:回车和换行在不同环境下的意义不同,正如sleep(1)和Sleep(1
    )【注意S大写】这两个函数的不同一样,sleep(1)在linux下表示延时1s,而Sleep(1)在vc++下表
    示延时1ms
    ,如果不依据环境来讨论回车和换行,是无意义的,只能是让人们误入歧途和浪费时间。  
      我只在arm-linux C和vc++
    下做了试验,请大家在接触其它语言环境下,小心推广,不行就自己动手做试验,最可靠。在arm-linux C和vc++下回车换行的意义如下。 
      回车 代码:CR ASCII码:\ r ,十六进制,0x0d
    ,回车的作用只是移动光标至该行的起始位置; 
      换行 代码:LF ASCII码:\ n ,十六进制,0x0a,换行至下一行行首起始位置; 
      Linux和windows下,回车试验 
    CODE: 
    sprintf(versionbuf,"%s","TEST_VERSION_1_0_11\rabcdefg\r34567\n"); printf("%s",versionbuf);
        均打印输出:34567fgRSION_1_0_11,证明了以上结论。  
      其实回车和换行之所以把大家搞迷糊的一个重要原因,是大家把键盘的 
    “回车键”,0x0d表示“回车”,我们在windows
    下的txt文件下敲下的回车键等情况搅在了一起。在键盘上敲下回车键,在不同软件下获得字符大有不同。 
       Windows下在
    txt文件中敲下回车键,然后16进制观察,你会发现获得了2个字符,0x0d和0x0a,这个大家都知道,但这不意味着,在任何情况下敲下回车键,都会获得0x0d和0x0a。    在linux下,你对一个文件,敲下回车键,你就会发现,它每次只增加一个字符。
    展开全文
  • 读写文件时遇到0D0A、00问题

    千次阅读 2018-05-30 11:38:50
    若是以字符串的形式写入数据(如puts函数)则在字符串中不能有\0不然\0之后的内容将无法写入。问题:1、如何让系统不自动添加\r\n?在打开文件时打开方式中添加‘b’这样系统就会以二进制的形式打开文件之后再读写时...
    是写入\n则在\n前边自动添加\r。
    若是以字符串的形式写入数据(如puts函数)则在字符串中不能有\0不然\0之后的内容将无法写入。

    问题:
    1、如何让系统不自动添加\r\n?
    在打开文件时打开方式中添加‘b’这样系统就会以二进制的形式打开文件之后再读写时,系统将不会自动补\r\n。
    2、如何向文件中写入\0?
    使用单个字符写入的形式可以将\0写入文件(fputc使用过可行)

    展开全文
  • 回车换行问题0x0D和0x0A

    万次阅读 多人点赞 2011-12-30 15:13:49
    在01.txt文件中输入12然后enter,在ultraedit中看到的二进制是3132 0d 0a   然后程序如下:   int mian() { FILE *fp1,*fp2,*fp3,*fp4,*fp5,*fp6;    char a[10]; char b[10];  ...
  • TypeError:iteration over a 0-d tensor

    千次阅读 2020-05-21 16:49:37
    参考numpy官方文档 ... 当0-D的数组转换为list时,必须使用tolist(),不能使用list...The base case for this recursion is a 0D array: >>> a = np.array(1) >>> list(a) Traceback (most recent cal
  • TypeError: iteration over a 0-d tensor

    千次阅读 2020-06-02 00:45:08
    模型训练报错: TypeError: iteration over a 0-d tensor 解决: total_loss+=loss 换成如下方式 total_loss+=loss.item()
  • 程序中有data[0]这种操作的换成data.item[] 我的错误是返回值个数不符 return loss loss, prec = sia_loss() AttributeError: 'list' object has no attribute 'requires_grad' 网路输出的特征用[ ]括起来变成...
  • 读取word文档报错 错误信息 ... read 0x3C0A0D0A0DBFBBEF, expected 0xE11AB1A1E011CFD0 private final static String filePath = "D:/Test.doc"; public static void main(String[] args) th...
  • 数组中&a与&a[0]的区别

    万次阅读 多人点赞 2017-07-09 10:34:57
    在探讨这个问题之前,我们首先来看一道笔试题,如下:  【摘自牛客网】下列代码的结果是:(正确答案是 C)main() { int a[5]={1,2,3,4,5};...} A、3,5 B、2,4 C、2,5 D、3,4  下面我们来分
  • 问题: 今天安装python及opencv-python环境,在pycharm运行实例程序时,图片无法加载,如下图: 搜索了很多文章都没有解决,一直以为是环境配置的问题,最后发现是路径出错。 (1)斜杠与反斜杠 ...
  • 错误原因: 在防火墙中默认 nat 是 REJECT的,所以端口映射被拒绝。 解决方法: vim /etc/sysconfig/iptables ##注释掉下面这一行,这行的意思是...#-A FORWARD -j REJECT --reject-with icmp-host-prohibited #...
  • 关于0x0d与0x0a的ASCII。

    万次阅读 2007-04-17 21:43:00
    今天发现一个有趣的现象:在masm(我用的版本是6.11)中作汇编时发现,0x0d与0x0a有着不同的作用。比如:“dead for dream”在这个字符串后只加上0x0d则得到 “光标移到开头的那个d下面,而没有换行”,再输入字符的...
  • 解决方法: 参考 https://blog.csdn.net/qq_43521500/article/details/108751507 成功解决
  • (scanf(“%d”,&a)!=0)的意思是:scanf(“%d”,&a)成功输入则为1,未输入则为0,所以会出现一直在等待输入的情况..与输入是否为0是不同概念 可将: 要输入为0结束写为: ...
  • cmd: cd /D %~dp0 的含义

    万次阅读 2018-07-21 08:11:57
    cd /d %~dp0是什么意思啊? 批处理文件中的一条语句 意思是  更改当前目录为批处理本身的目录  有些晕吧?不急,我举例  比如你有个批处理a.bat在D:\qq文件夹下  a.bat内容为  cd /d %~dp0 在这里 cd /d 表示...
  • 启动docker容器的时候报错 docker: Error response from daemon: driver failed programming external connectivity ...tensquare_mysql (83328102ca96365aa455c994239587acefdbc5cfd9e18676dee082d88ae0420d): (i...
  • 483045022100f37c9b1f791e285f708972d48378ddd9ef45c4dfc1aa0ad5dd208aceda8404f702205ffac2e91f3a6f8f777105b8a16283833944583a1c5884e3e5c90069cf709073012102a4b9c5a3e7c6e6c6fded56e882da3d7790d6a211eac862a551...
  • 0x0d和0x0a 学习

    万次阅读 2010-01-05 15:16:00
    今天在看代码时看到 0x0D和0x0A,那个是换行,那个是回车呢?说实话,不清楚,到网上搜一下吧,看到了,知道了! if (szCh == 0x0D) { continue; } if (szCh == 0x0A) { break; } *szBuf++ = szCh;
  • iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 5000 -j DNAT --to-destination 172.18.0.4:5000 ! -i br-ff45d935188b: iptables: No chain/target/match by that name...
  • 单片机实验-A/DD/A转换

    万次阅读 多人点赞 2017-12-10 22:10:36
    ORG 0000H DATAR0 EQU 50H ;定义保存采集现场数据单元 LJMP MAIN ORG 000BH ;定义定时/计数器 T0 中断入口地址 LJMP T0P ORG 0100H MAIN : MOV SP , #60H
  • { 0A544A504547496D616765248D0100FFD8FFE000104A46494600010201013A01 3A...0A00000000000B00D00000000C00000000000D00000000000E00E80000000001 010000000101FF00000002018300000003018300000004018000000005018300 ...
  • { 1754506F727461626C654E6574776F726B47726170686963BA13000089504E47 0D0A1A0A0000000D4948445200000080000000800806000000C33E61CB000000 097048597300000B1200000B1201D2DD7EFC0000136C49444154789CED5D7D6C ...
  • 分析:用POI读取Excel文件时报错。通常的原因:是读取的文件头信息不对,http://blog.sina.com.cn/robertlizhiqiang经常出现在: FileInputStream in = ... HSSFWorkbook workbook = null; in = new FileI...
  • int a[ ]={0};

    千次阅读 2018-07-21 10:07:09
    如题,这样初始化数组究竟可不可以。 下面看一段代码: #include <stdio.h>... int a[]={0};... for(i=0;...a[%d]=%d\t",i,a[i]); } int b[]={0}; putchar('\n'); for(i=0;i...
  • IP地址分类(A类 B类 C类 D类 E类)

    万次阅读 多人点赞 2019-01-10 22:17:20
    IP地址由四段组成,每个字段是一个字节,即4个字节、 每个字节有8位,最大值是255(=256:0~255)。 全世界范围是唯一的 32 位(4个字节 * 8位)的标识符。 IP地址由两部分组成,即网络地址和主机地址,二者是主从...
  • \D+$)[0-9a-zA-Z]{6,35}$ ^ (?![^a-zA-Z]+$) (?!\D+$) [0-9a-zA-Z] {6,35} $ 1. ^ 匹配字符串开始(或行首) 2. (?![^a-zA-Z]+$)断言 此位置 后,字符串结尾之前,所有的字符不能全部由数字([^a-zA-Z]表示...
  • QUIC协议是如何做到0RTT加密传输的(addons)

    万次阅读 多人点赞 2018-07-06 08:51:46
    QUIC作为HTTP2.0形成...首先解释一下什么是0RTT。 所谓的0RTT就是,通信双方发起通信连接时,第一个数据包便可以携带有效的业务数据。而我们知道,这个使用传统的TCP是完全不可能的,除非你使能了TCP Fast Open特...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,929,993
精华内容 2,371,997
关键字:

0d 0a