我们在工控软件中,会经常使用到网口和串口,去接受和发送数据。通常我们发送数据的模式有两种,一种16进制,一种是ASCII码。16进制的的经常会用来和仪器PLC等设备通讯。ACSII码是一种文本模式。当我们不点选16进制时,按文本模式发送。这是我们输入的文本区的内容是一个个字符。比如输入50 ,这时50为‘5’和‘0’两个字符。发送的时候会将字符‘5’的ASCII码和字符‘0’的ASCII码发送出去,即是0x35,0x30 。当我们按16进制发送50 时,这时50位一个数即0x50。这就是为什么按16进制发送的效率要高于ASCII码的效率。从中我们也可以看出计算机底层发送数据是一个个数。
当我们接受的时候,我们同样也是接受到一个的数。当我们接受到0x35,0x30.如果我们按ASCII接收的话,就会变成50 。如果我们按16进制接收的话就是0x35,0x30.得到两个数。
注意:串口和网口接收回来,当你用char 类型的buf去接收的时候,其实已经进行一次转换了。这是它的十进制范围是-128~127。如果我们要将其变成无符号的数就要用byte类型的buf去接收,或者用char接收,强制转化为unsigned char类型。这样的它的十进制范围就变成了0~255。这样你就可以用多个buf 组成16,32位等数据了。
最后 总结
计算机底层发送数据是一个个数。接收来之后,要我们自己按照自己的方式转换。
常见的转换的函数用 itoa strtoul strtol atoi atof。多个字节转化要使用移位,取反等操作。
————————————————
原文链接:https://blog.csdn.net/wuan584974722/article/details/54460220