我在javascript中解析一个二进制文件,每个字节存储两条信息,每个半字节一个.这些值当然是0-16和0-16.
在文件格式的所有其他部分中,每个字节代表一条信息,因此我一直使用以下方法成功获取所需的数字值:
var num = str.charCodeAt(0) & 0xFF;
Run Code Online (Sandbox Code Playgroud)
但是我一直试图弄清楚如何获得第一个半字节的0-16值,并且从我的单字节字符"str"获得第二个半字节的值.
感谢任何帮助.
我正在学习 ARM,因此回到二进制/十六进制算术的基础知识,这让我开始思考二进制数通常如何以 4 为一组呈现,例如
1111 1110 1101 1100
Is there a particular reason why it's done this way? Seeing as we normally describe memory in terms of bits/bytes/megabytes etc I'd have thought they'd be better grouped by 8?
处理存储在一个字节数据中的两个不同值的正确方法是什么.我有一个包含两个半字节的字节,每个半字节包含自己的数据.我想把顶部的半字节和底部的半字节读成自己的变量.
11110000
=要读入的高4位节流,$throttle
应该是0到15之间的值.
00001111
=低4位制动,要读入$brake
,并且应该是0到15之间的值.
别忘了,司机可以同时使用油门和刹车,这样你就可以得到一个像这样的值11000111
.我自己想出了一个高4位的解决方案,就像使用>>
(位右移)运算符4次将低4位推出一样简单.$Throttle = $ThrBrk >> 4
,但由于我不能在低位四位的一次移动中做到这一点,所以我的源代码看起来有点糟糕.
我试图使用pyserial发送和接收rs232数据,但我不明白如何正确发送正确的数据.我有什么小信息解释数据字符串并说它应该分成高和低半字节.转换为半字节是我没有得到的部分,我试图阅读它但是没有得到如何使用它为我的情况.
所以我有这个数据字符串通过串口发送.10,00,00,00,00,00,16,0A,20,20,20,20,00,00,00,00,00,00,00,00,50
它表示将字节分成高半字节和低字节,然后将21个字节转换为42个字符的数据字符串.
有人可以帮我解释一下如何为我做这个吗?
我面临以下情况。我有一个这样的结构:
typedef struct
{
uint8 nibble_1 : 4;
uint8 nibble_2 : 4;
uint8 data_1;
uint8 data_2;
uint8 data_3;
} NibbleStruct;
Run Code Online (Sandbox Code Playgroud)
背景信息:它是用于 CAN 通信的 32 位消息。
在代码中我有以下内容:
...
NibbleStruct nibble_struct;
uint8 nibble_to_assign = 0U;
nibble_struct.nibble_1 = nibble_to_assign;
...
Run Code Online (Sandbox Code Playgroud)
我需要保留 GCC (gnu99) 标志-Werror=conversion
,但这会给出错误消息:
file_name.c 错误:从 'uint8' 转换为 'unsigned char:4' 可能会改变其值 [-Werror=conversion]|
我尝试用类似的东西进行投射
...
nibble_struct.nibble_1 = (uint8:4) nibble_to_assign; // invalid code
...
Run Code Online (Sandbox Code Playgroud)
和
...
nibble_struct.nibble_1 = (uint8) nibble_to_assign : 4; // invalid code
...
Run Code Online (Sandbox Code Playgroud)
但对于这不能编译并不感到惊讶。
有什么方法可以将我的变量转换为结构的nibble_to_assign
半字节吗?nibble_1
或者在结构体外部的代码中声明一个半字节。
c variable-assignment compiler-flags compiler-warnings nibble