c - fpe2 和 sp78 数据类型?

标签 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"

这些是稍后 Apple 的 IOKit 作为返回值写入内存的数据类型,然后需要将其转换为可用的东西。代码的作者是这样做的(注意他在注释中打错了 fp78 而不是 sp78...):

// convert fp78 value to temperature
int intValue = (val.bytes[0] * 256 + val.bytes[1]) >> 2;
return intValue / 64.0;

我觉得令人难以置信的是,除了访问 temp 和 fan 的非官方代码示异常(exception),我找不到关于这两个代码 fpe2sp78 的任何注释在 Mac 上阅读。

这里有人知道如何自己解决这些代码吗?!基本上有人可以指出一些关于此的文档和/或在这里解释这些数据类型是什么吗?

最佳答案

虽然似乎没有这些类型名称的任何“官方”文档,但它们足够通用以供理解。

FP = float ,无符号。

SP = float ,有符号。

最后两位(十六进制)数字表示整数/小数位。总数告诉我们该值适合 16 位。

因此:FPE2 = float ,无符号,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

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

要将这些值转换为整数,丢弃 F 位(通过移位)并转换为整数类型。请注意 SP 值上的符号位,是否保留符号取决于您要移动的类型。

关于c - fpe2 和 sp78 数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22160746/

相关文章:

C# 将 T 转换为 long

scala - 什么是 Scala 中的类型 lambda,它们有什么好处?

close() 可以阻止执行一段时间吗?

c 受 printf 影响的最大数组大小

ios - 如何降低网速

mysql - 试图将太多数据放入 mysql TEXT 数据类型

c - 当我将像素乘以比例因子时图像变黑

c - 如何修复我的代码以从函数返回指向结构的指针

java - 在 Mountain Lion 中安装 jpype

macos - 在 Mac 上获取桌面背景