Iva*_*vic 3 c macos types iokit
我一直在分析在Mac OS X上获得CPU温度和CPU风扇速度所需的代码.有很多例子.这是其中之一:
https://github.com/lavoiesl/osx-cpu-temp
现在,在smc.h文件中定义了一些奇怪的(对我来说)数据类型:
#define DATATYPE_FPE2 "fpe2"
#define DATATYPE_SP78 "sp78"
Run Code Online (Sandbox Code Playgroud)
这些是后来Apple的IOKit在内存中作为返回值写入的数据类型,然后需要将其转换为可用的内容.代码的作者就是这样(请注意,他在评论中写了一个拼写错误的fp78而不是sp78):
// convert fp78 value to temperature
int intValue = (val.bytes[0] * 256 + val.bytes[1]) >> 2;
return intValue / 64.0;
Run Code Online (Sandbox Code Playgroud)
我觉得令人难以置信的是,我无法找到关于这两个代码fpe2和sp78的任何注释,旁边是用于访问Mac上的临时和扇形读数的非官方代码示例.
这里有没有人知道如何自己解决这些问题?关于这些代码?!基本上,有人可以指出我有关此的一些文档和/或在这里解释这些数据类型是什么?
虽然似乎没有关于这些类型名称的任何"官方"文档,但它们通用性足以弄明白.
FP =浮点,无符号.
SP =浮点数,已签名.
最后两个(十六进制)数字表示整数/分数位.总数告诉我们这个值适合16位.
所以:FPE2=浮点,无符号,14(0xE)位整数,2(0x2)位分数.
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
I I I I I I I I I I I I I I F F
Run Code Online (Sandbox Code Playgroud)
SP值增加了符号位的复杂性.
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
S I I I I I I I F F F F F F F F
Run Code Online (Sandbox Code Playgroud)
要将这些值转换为整数,请丢弃F位(通过移位)并转换为整数类型.注意SP值上的符号位,无论符号是否保留取决于您要移动的类型.