C++ 中的整数字节交换

2024-02-15

我正在为我的 C++ 课程做家庭作业。我正在研究的问题如下:

编写一个函数,它接受一个无符号短整型(2 个字节)并交换字节。例如,如果交换后 x = 258 ( 00000001 00000010 ),则 x 将为 513 ( 00000010 00000001 )。

到目前为止,这是我的代码:

#include <iostream>

using namespace std;

unsigned short int ByteSwap(unsigned short int *x);

int main()
{
  unsigned short int x = 258;
  ByteSwap(&x);

  cout << endl << x << endl;

  system("pause");
  return 0;
}

and

unsigned short int ByteSwap(unsigned short int *x)
{
  long s;
  long byte1[8], byte2[8];

  for (int i = 0; i < 16; i++)
  {
    s = (*x >> i)%2;

    if(i < 8)
    {
      byte1[i] = s;
      cout << byte1[i];
    }
    if(i == 8)
      cout << " ";

    if(i >= 8)
    {
      byte2[i-8] = s;
      cout << byte2[i];
    }
  }

  //Here I need to swap the two bytes
  return *x;
}   

我的代码有两个问题希望你能帮我解决。

  1. 由于某种原因我的两个字节都是 01000000
  2. 我真的不知道如何交换字节。我的老师关于位操作的笔记非常破碎且难以理解,而且对我来说没有多大意义。

预先非常感谢您。我真的很感谢你对我的帮助。


C++23 中的新功能:

标准库现在有一个函数可以提供这种功能:

#include <iostream>
#include <bit>

int main() {
  unsigned short x = 258;
  x = std::byteswap(x);
  std::cout << x << endl;
}

原答案:

我认为你把它复杂化了,如果我们假设一个短由 2 个字节(16 位)组成,那么你所需要的一切 要做的是

  • 提取高字节hibyte = (x & 0xff00) >> 8;
  • 提取低字节lobyte = (x & 0xff);
  • 以相反的顺序组合它们x = lobyte << 8 | hibyte;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 中的整数字节交换 的相关文章

随机推荐

  • Macos Catalina 更新后出现错误:无法运行 colorls

    更新至 macOSCatalina打开终端时出错 ERROR Can t find Ruby library file or shared library colorls usage dirname path Users varunsukh
  • 仅使用公式即可获取当前文化以进行本地化

    有没有办法使用 Excel 中的公式确定当前系统区域性不使用任何VBA代码 我想象这样简单的事情 IF CULTURE sk SK Preh ad Overview 或者类似的事情也适合我 IF CURRENCYSIGN Preh ad O
  • 仅备份 SQL 架构?

    我需要创建 SQL Server 2005 数据库的备份 该数据库只有结构 没有记录 只有架构 有什么办法可以做到这一点吗 编辑 我正在尝试创建一个备份文件以与旧进程一起使用 因此脚本无法满足我的目的 抱歉 使用 3 步流程 从工作数据库生
  • 通过网站从 PHP 服务器下载文件 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有物理文件 希望用户在我的网站上下载 这些文件位于 C xampp htdocs myfile uploads 我需要一个 PHP 脚本
  • 撤消 git Push 到 Assembla

    所以 今天我想做一件好事并重新排列我的存储库中的文件 致力于并推动我的Assembla存储库 由于我没有使用 git moving 命令 所有文件都丢失了历史记录 我意识到自己的错误 并希望摆脱不必要的改变 以便之后可以采取正确的行动 我尝
  • 将 Java-Pair-Rdd 转换为 Rdd

    我需要将 Java pair rdd 转换为 csv 所以我想将其转换为rdd 来解决我的问题 我想要的是改变我的rdd 从 Key Value Jack a b c to Key value Jack a Jack b Jack c 我认
  • 如何在ElasticSearch中不进行分析?

    我不想分析 ElasticSearch 字段中的一个字段 即 e 应逐字保存和比较 这些值将包含字母 数字 空格 破折号 斜杠以及可能的其他字符 如果我没有在该字段的映射中提供分析器 则默认情况下仍使用分词器将我的逐字字符串分解为单词块 我
  • 在 Ruby 中删除“@”符号及其后面的所有内容

    我正在开发一个应用程序 我需要将用户电子邮件地址中 符号之前的任何内容作为他 她的名字和姓氏传递 例如 如果用户有电子邮件地址 电子邮件受保护 cdn cgi l email protection 比当用户提交表单时我从电子邮件中删除 ex
  • Typescript - 导入 Express 不起作用

    我的应用程序中有这个 types express已安装依赖项 import express require express 它指向的是express并说this is an unexpected identifier当我运行我的服务器时 我
  • Memcached 守护进程是否可以在不终止进程的情况下释放未使用的内存?

    我相信您不能强制正在运行的 Memcached 实例取消分配内存 除非终止该 Memcached 实例 并释放它所持有的所有内存 有谁知道一份明确的文档 甚至是来自可靠来源的邮件列表或博客文章 可以证实或否认这种印象 据我了解 Memcac
  • Tkinter tkFileDialog 不存在[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Python 中的 Tkinter 显示打开的文件对话框 我发现的每个示例似乎都很容易使用 但它们都以以下行开头 import tkFileDialog 这行代码给我抛出了一个错误 说 No mo
  • MVC3 - 编译的 Razor 视图找不到 _ViewStart

    我在单独的类库中使用编译的 Razor 视图作为 MVC3 的一种插件系统 我遵循 Chris Van De Steed 的指南here http www chrisvandesteeg nl 2010 11 22 embedding pr
  • 如何使用 bin/www 为node.js heroku 部署编写Procfile?

    我正在尝试部署 Heroku 应用程序 我相信 procfile 可能是我的应用程序未部署的原因 我尝试了多种解决方案 包括 网络 节点 bin www 网络 npm 启动 我的应用程序无法运行可能还有另一个原因 但我想确保我的 Procf
  • 访问类中的值类似于 boost::any

    我正在做一个简单的boost any 类似用于教育目的的课程 但我不知道如何访问存储的值 我可以完美地设置该值 但是当我尝试访问 holder 类中的任何成员时 编译器只是抱怨在它派生的类中找不到该成员 我无法将成员声明为virtual因为
  • 使用 Unirest C# 将 http 响应正文转换为 JSON 格式

    我正在使用 mashape api https market mashape com montanaflynn dictionary https market mashape com montanaflynn dictionary 这是我的
  • Clojure 中函数的类型提示

    我正在尝试解决 Clojure 中的反射警告 该警告似乎是由于对作为普通 Java 对象的函数返回值缺乏类型推断而导致的 演示该问题的简单示例代码 set warn on reflection true defn foo Integer x
  • Ruby 如何处理字节/二进制?

    我正在尝试通过套接字发送一系列二进制字节 以满足我公司使用的特定标准 我公司中没有人以前使用过 Ruby 来实现这一点 但在其他语言中 他们一次发送一个字节的数据 通常使用某种 打包 方法 无论如何 我找不到动态创建二进制文件 或者根本无法
  • Flexslider 手动控件不起作用

    我已经使用 Flexslider 创建了一个滑块 并且尝试使用 manualControls 创建导航菜单 但链接不起作用 以下是 flexslider 和滑块 导航本身的代码 柔性滑块 滑块和
  • os.system 中的变量

    我在用os systemPython 中的方法在 Linux 中打开文件 但我不知道如何在 os system 命令内传递变量 a import os a 4 os system gedit a test txt 如何在命令中将变量作为整数
  • C++ 中的整数字节交换

    我正在为我的 C 课程做家庭作业 我正在研究的问题如下 编写一个函数 它接受一个无符号短整型 2 个字节 并交换字节 例如 如果交换后 x 258 00000001 00000010 则 x 将为 513 00000010 00000001