【问题标题】:Construct integer from little-endian values in C从 C 中的小端值构造整数
【发布时间】:2019-09-08 02:48:29
【问题描述】:

我在 C 中有几个变量:

  • char* data 指向数据的指针(总是在 LE 中)
  • int dataStart - data 我的整数开始的偏移量
  • int dataLength - 整数数据的字节数 (0<=dataLength<=8)
  • int sign - 1 表示正数或-1 表示负数

如何在 C 中将其转换为 __int64(或者我需要其他什么?)值?

我知道整数仅限于2^63−1

【问题讨论】:

  • 尝试一下。当您遇到困难时,以minimal reproducible example 的形式返回具体问题。
  • 字符是原始字节,应该以数字方式解释,还是字符串? IOW,数字1234 是否会对应字节08 D2D2 0849 50 51 52?在确定了这一点之后,还有什么会阻止您转换为您需要的形式?

标签: c char type-conversion


【解决方案1】:
int64_t makeint(const char *buff, size_t offset, size_t offsetinint, size_t len, int minus)
{
    union
    {
        int64_t i64;
        uint8_t u8[8]
    }d64;

    offsetinint = offsetinint & 7;
    memset(&d64, 0, sizeof(d64));

    memcpy(&d64.u8[offsetinint], len > (8 - offsetinint) ? (8 - offsetinint) : len, buff + offset);
    d64.i64 *= -1 * !!minus;
    return d64.i64;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-01
    • 2022-01-22
    • 2015-07-06
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多