相关疑难解决方法(0)

将float序列化为32位整数的便携方式

我一直在努力寻找一种可移植的方法来序列化C和C++中的32位浮点变量,以便发送到微控制器和从微控制器发送.我希望格式足够明确,以便可以从其他语言完成序列化/反序列化,而无需太多努力.相关问题是:

C++中双/浮点型二进制序列化的可移植性

用C序列化double和float

c ++便携式转换为long to double

我知道在大多数情况下,类型转换联合/ memcpy可以正常工作,因为浮动表示是相同的,但我宁愿有更多的控制和心灵.到目前为止我想出的是以下内容:

void serialize_float32(uint8_t* buffer, float number, int32_t *index) {
    int e = 0;
    float sig = frexpf(number, &e);
    float sig_abs = fabsf(sig);
    uint32_t sig_i = 0;

    if (sig_abs >= 0.5) {
        sig_i = (uint32_t)((sig_abs - 0.5f) * 2.0f * 8388608.0f);
        e += 126;
    }

    uint32_t res = ((e & 0xFF) << 23) | (sig_i & 0x7FFFFF);
    if (sig < 0) {
        res |= 1 << 31;
    }

    buffer[(*index)++] = (res …
Run Code Online (Sandbox Code Playgroud)

c c++ embedded floating-point

7
推荐指数
2
解决办法
1086
查看次数

vec_sld是否对endian敏感?

我正在使用带有内核加密的PowerPC机器.我无法使用内置函数将AES密钥扩展从big endian移植到little endian.大端工作,但小端不工作.

下面的算法是IBM博客文章中提供的代码片段.我想我的问题与以下第2行有关:

typedef __vector unsigned char  uint8x16_p8;
uint8x64_p8 r0 = {0};

r3 = vec_perm(r1, r1, r5);       /* line  1 */
r6 = vec_sld(r0, r1, 12);        /* line  2 */
r3 = vcipherlast(r3, r4);        /* line  3 */

r1 = vec_xor(r1, r6);            /* line  4 */
r6 = vec_sld(r0, r6, 12);        /* line  5 */
r1 = vec_xor(r1, r6);            /* line  6 */
r6 = vec_sld(r0, r6, 12);        /* line  7 */
r1 = vec_xor(r1, r6);            /* …
Run Code Online (Sandbox Code Playgroud)

c powerpc simd endianness altivec

5
推荐指数
1
解决办法
996
查看次数

内存中的 long long 类型表示

我想从 8 字节类型中提取字节,就像char func(long long number, size_t offset)偏移 n 那样,我将得到第nth 个字节 (0 <= n <= 7)。这样做时,我意识到我不知道 8 字节变量在内存中是如何实际表示的。我希望你能帮我弄清楚。我首先编写了一个简短的 python 脚本来打印A每个字节中由s(ascii 值为 65)组成的数字

sumx = 0
for x in range(8):
    sumx += (ord('A')*256**x)
    print('x {} sumx {}'.format(x,sumx))
Run Code Online (Sandbox Code Playgroud)

输出是

x 0 sumx 65
x 1 sumx 16705
x 2 sumx 4276545
x 3 sumx 1094795585
x 4 sumx 280267669825
x 5 sumx 71748523475265
x 6 sumx 18367622009667905
x 7 sumx 4702111234474983745
Run Code Online (Sandbox Code Playgroud)

在我看来,每个数字都是一串As 后跟 0。接下来我写了一个简短的 …

c++ long-integer

5
推荐指数
2
解决办法
392
查看次数

标签 统计

c ×2

c++ ×2

altivec ×1

embedded ×1

endianness ×1

floating-point ×1

long-integer ×1

powerpc ×1

simd ×1