我有不同的十六进制数据来了,并存储成一个整数型寄存器。
当我使用fprint我可以看到以下内容:
0x3076
0x307c
.
.
.
不过,我想表现出上面提到的十六进制数据的小数点的版本如下。
12406
12412
.
.
.
从理论上讲,假设为你做将其转换为十进制后的第一个值。
(6* 16^0)+(7 * 16^1)+(0*16^2)+(3*16^3)=6 + 112+ 0 + 12288 = 12406
所以,如果我有“0x3076”的基于字符的版本,另外,如果我能得到每个单个字符6 - 7 - 0 - 3,我可以计算出小数量!
所以,我决定来划分“3076”的1000,我希望拿到3,但我有两个字符,而不是! 但是,如果我能得到3对的“307C”剩我没能获得“C”。 如果是十进制这可能工作不是十六进制!
另外,我想“ strtol
”命令。 当我使用Cygwin编译我的代码,我不知道哪里出错! 我做错了什么?
所以,我只需要找到一种方式来获得的每一个字符出来的HEX数据!
任何想法吗?
PS
下面是我为了帮你给我一个想法代码。
int get_readings(int source, int phase, int max_tries)
{
uint8_t buf[MAX_IEC1107_MSG_BODY];
uint8_t inbuf[MAX_IEC1107_MSG_BODY];
int inlen;
uint8_t *s;
int32_t value;
int status;
double voltage;
double current;
double active_power;
double reactive_power;
double apparent_power;
double power_factor;
double frequency;
s = buf;
*s++ = HOST_CMD_GET_READINGS_PHASE_1 + phase;
*s++ = 0x00;
if (max_tries != 1)
meter_set_max_tries(&emeter[source].meter_msg, max_tries);
if (meter_exchange(&emeter[source].meter_msg, buf, 2, inbuf, &inlen)
&&
inbuf[1] != 0xFF)
{
emeter[source].no_response = FALSE;
s = inbuf;
/* Get current readings */
value = (s[3] << 8) | s[2];
fprint(stderr, "value:" %p\n, value); // this give me HEX code
。 。 。