ZBLOG

#include // 大端转小端 uint64_t swap_uint64(uint64_t value) { return ((value & 0x00000000000000FFULL)

你在提供的代码中有一个小错误,导致大端和小端转换不正确。特别是在右移位时,有些掩码没有考虑到64位无符号整数的完整性。以下是修正后的代码:

#include <stdint.h>
#include <stdio.h>

// 大端转小端
uint64_t swap_uint64(uint64_t value) {
    return ((value & 0x00000000000000FFULL) << 56) |
           ((value & 0x000000000000FF00ULL) << 40) |
           ((value & 0x00000000FF000000ULL) << 24) |
           ((value & 0x00FF000000000000ULL) << 8)  |
           ((value & 0x0000FF00ULL) >> 8)          |
           ((value & 0x00FF0000ULL) >> 24)         |
           ((value & 0xFF00000000ULL) >> 40)       |
           ((value & 0xFF80000000ULL) >> 56);      // 注意这里是去掉了多余的零
}

// 使用示例
int main() {
    uint64_t original = 0x1122334455667788;
    uint64_t swapped = swap_uint64(original);

    // 打印结果
    printf("Original: %016llX\n", original);
    printf("Swapped: %016llX\n", swapped);

    return 0;
}

修正要点:

  1. 掩码(Mask):确保每个掩码都正确并且与右移操作匹配。例如,在 ((value & 0x0000FF00) 的时候应该添加 ULL 后缀以确保它是无符号长整型。

  2. 打印格式:使用 %016llX 来格式化输出,以确保输出为16位十六进制数,并用零填充。

测试程序

如果你运行这个修正后的程序,你将会得到正确的大端和小端之间的转换。原始值 1122334455667788 将被正确地转换并显示为其对应的小端表示形式。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20807

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?