将数组short转换为char的最快方法

2024-01-31

我每秒必须处理大约 2000、100 个元素数组。这些数组对我来说是短裤,其中的数据位于高位,需要移位并转换为字符。这是我能得到的最有效的方法,还是有更快的方法来执行此操作? (我必须跳过其中 2 个值)

for(int i = 0; i < 48; i++)
{
    a[i] = (char)(b[i] >> 8);
    a[i+48] = (char)(b[i+50] >> 8);
}

即使移位和按位运算很快,您也可以尝试将短数组作为字符指针处理,如注释中其他建议的那样。每个标准都允许这样做,并且对于常见的体系结构来说,它可以实现预期的效果 - 留下字节序问题。

所以你可以尝试首先确定你的字节序:

bool isBigEndian() {
    short i = 1;   // sets only lowest order bit
    char *ix = reinterpret_cast<char *>(&i);
    return (*ix == 0);   // will be 1 if little endian
}

你的循环现在变成:

int shft = isBigEndian()? 0 : 1;
char * pb = reinterpret_cast<char *>(b);
for(int i = 0; i < 48; i++)
{
    a[i] = pt[2 * i + shft];
    a[i+48] = pt[2 * i + 50 + shft];
}

但与低级优化一样,必须使用将在生产代码中使用的编译器和编译器选项进行基准测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将数组short转换为char的最快方法 的相关文章

随机推荐

  • C++17 中的 std::make_shared() 更改

    In cppref http en cppreference com w cpp memory shared ptr make shared 以下情况直到 C 17 才成立 代码如f std shared ptr
  • 有没有类似 CSS 源映射的东西?

    我使用 jQuery 动态地将 CSS 标签添加到页面中 text css appendTo document head 在 Chrome 开发者工具中查看时 所有 CSS 都显示为 localhost 这并不总是有帮助 有没有类似 CSS
  • DataGrid ScrollIntoView - 如何滚动到未显示的第一行?

    我正在尝试向下滚动带有代码的 WPF DataGrid 我用 int itemNum 0 private void Down Click object sender RoutedEventArgs e if itemNum 1 gt dat
  • C++1y 没有从 std::bind 到 std::function 的可行转换

    我正在尝试将转发函数存储到std function 如果我使用std bind 我收到错误消息 例如no viable conversion from 如果我使用 lambda 它编译没问题 这是示例代码 include
  • 输入文本框后台的 jQuery 自动完成

    我有一个 jQuery 文本框自动完成脚本 它使用 PHP 脚本来查询 MySQL 数据库 目前 结果显示在文本框下方 但我希望它看起来就像在文本框中淡出一样 我怎样才能做这样的事情 Google Instant 搜索框就是一个例子 我当前
  • Memcached – GET 和 SET 操作是原子的吗?

    场景如下 一个查询 memcached 缓存的简单网站 批处理作业每 10 15 分钟更新一次相同的缓存 使用该模式是否会出现任何问题 例如缓存未命中 我担心所有可能发生的比赛状况 例如 如果网站对 memcached 中缓存的对象执行 G
  • 以 Scaffold 作为子项的 InheritedWidget 似乎不起作用

    我希望在 Flutter 应用程序的根级别使用 InheritedWidget 以确保经过身份验证的用户的详细信息可供所有子小部件使用 本质上使 Scaffold 成为 IW 的子级 如下所示 override Widget build B
  • WebView 不接受某些 cookie

    我正在 Webview 中加载一个网站 该网站使用一些 cookie 来存储会话 我写了以下几行来接受cookie CookieSyncManager createInstance this CookieSyncManager getIns
  • DOM4J:检索按属性值过滤的节点值

    我有一个给定的 xml 结构如下
  • iOS 17 中的 SwiftUI View 泄漏

    似乎 View 及其成员在演示后不会取消分配 main struct ExampleApp SwiftUI App State var show false var body some Scene WindowGroup VStack Bu
  • 如何使用openlayers在浏览器中显示高分辨率图像

    我正在尝试使用 openlayers 5 在浏览器中显示高分辨率图像 我找到了一个有关如何使用 Zoomify 创建图像图块并使用 openlayers 地图渲染它的示例 但我无法将它用于我自己的形象 我对此完全陌生 我问的问题可能很琐碎
  • 单击按钮时旋转 Font Awesome 图标并触发手风琴过渡

    我是解决方案的一部分 但我坚持在单击实际的 披露 按钮时让 FA 图标旋转 我似乎也不知道该把它放在哪里transition属性 以便让披露内容框顺利打开 类似于手风琴 例如这个 https www w3schools com howto
  • 任意数量集合的笛卡尔积

    您是否知道一些简洁的 Java 库可以让您生成两个 或更多 集合的笛卡尔积 例如 我有三套 第一个是 Person 类的对象 第二个是 Gift 类的对象 第三个是 GiftExtension 类的对象 我想生成一组包含所有可能的三元组 P
  • 如何在基于 servlet 的 Web 应用程序中临时保存生成的文件

    我正在尝试生成一个 XML 文件并将其保存在 WEB INF pages 下面是我的代码 它使用相对路径 File folder new File src main webapp WEB INF pages StreamResult res
  • 使用 R Shiny 将(多个)值添加到数据框

    我将 R闪亮与 ggplot 结合使用来可视化某个数据集 我希望用户能够向该数据集添加值 我可以让我的应用程序向我显示原始数据 一个数据点 但是一旦用户输入一个新点 旧的数据点就消失了 用户输入的数据实际上并未存储在我的数据框中 我正在使用
  • Android WebView加载GoogleMap数据渲染

    我正在尝试使用以下函数在 WebView 中显示 div String baseUrl String mimeType text html String encoding UTF 8 html sb toString String hist
  • 有人可以向我解释“卫生”的概念吗(我是一名方案程序员)?

    所以 我是 r6rs 方案的新手 正在学习宏 谁能给我解释一下 卫生 是什么意思 提前致谢 卫生经常在宏的上下文中使用 卫生宏不使用可能会干扰正在扩展的代码的变量名称 这是一个例子 假设我们想要定义or带有宏的特殊形式 直观地说 or a
  • 通过 os.system 推送 [重复]

    这个问题在这里已经有答案了 我正在使用 crontab 为我的 Minecraft 服务器运行维护脚本 大多数时候它工作正常 除非 crontab 尝试使用重新启动脚本 如果我手动运行重新启动脚本 则不会有任何问题 因为我相信它与路径名有关
  • Android:在非 root 设备上运行脚本

    我可以在非 root 设备上运行二进制可执行文件或脚本 bash 文件吗 我有一个像这样的小脚本 helloworld sh echo hello world 我把它保存在 sdcard并尝试跑步 但我得到了 没有权限 我研究过 原因是执行
  • 将数组short转换为char的最快方法

    我每秒必须处理大约 2000 100 个元素数组 这些数组对我来说是短裤 其中的数据位于高位 需要移位并转换为字符 这是我能得到的最有效的方法 还是有更快的方法来执行此操作 我必须跳过其中 2 个值 for int i 0 i lt 48