首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从EDID解析数字数据

如何从EDID解析数字数据
EN

Stack Overflow用户
提问于 2012-04-17 20:15:06
回答 2查看 1.6K关注 0票数 0

我有一种方法可以用nVidia接口获取显示器的EDID信息,这给了我一个128个无符号字符的数组。然而,当我在wikipedia上阅读edid数据格式时,我注意到制造商id (字节8-9)中的字母表示为5位数字,因此我不知道如何将其作为有意义的数据读取到C++中。

我的计划是只定义一个与edid格式匹配的结构类型,并将我的字符数组转换为该结构类型,但我不知道现在是否可能,因为我所知的C++中最小大小的数据类型是一个字节。

谢谢。

比尔。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-17 20:19:43

为了提取和操作少于一个字节的信息,您需要使用bit-wise operations

例如,为了提取存储为char的第一个(最低有效)5位的5位数字,您可以这样说:

代码语言:javascript
复制
unsigned char x = (BYTE & 0x1F);

其将在x中存储由BYTE的右5比特表示的值。在该示例中,我使用了AND运算符(C/C++中的&运算符),它基本上使用掩码来隐藏值的3个最高有效位(最左侧),(使用十六进制值1F,它在二进制中是00011111 )来隔离最初的5位。

其他按位运算符包括OR、XOR和左/右位移位,它们在C++中分别使用|^<<>>运算符执行。

票数 2
EN

Stack Overflow用户

发布于 2012-04-17 20:22:51

使用位操作(即移位)提取每个字符的位,并使用查找表(为了更好的可移植性)将它们转换为字符。

代码语言:javascript
复制
uint16_t EDID_vendor_ID = EDID[8] | EDID[9] << 8;
char char_LUT[]={' ', 'A', 'B', /*...*/ 'Z'};
char ID[3] = { char_LUT[ (EDID_vendor_ID >> 6) & 7 ], 
               char_LUT[ (EDID_vendor_ID >> 3) & 7 ],
               char_LUT[ (EDID_vendor_ID     ) & 7 ] }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10191049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档