ARM Neon:如何从 uint8x16_t 转换为 uint8x8x2_t?

2024-04-09

我最近发现了关于vreinterpret{q}_dsttype_src类型转换运算符 https://stackoverflow.com/a/43519190/2436175。但是,这似乎不支持所描述的数据类型的转换这个链接 http://infocenter.arm.com/help/topic/com.arm.doc.dui0491f/BABFBJAA.html(页面底部):

一些内在函数使用以下形式的向量类型数组:

<type><size>x<number of lanes>x<length of array>_t

这些类型被视为包含单个 名为 val 的元素。

结构定义示例如下:

struct int16x4x2_t    
{
    int16x4_t val[2];     
};

你知道如何从uint8x16_t to uint8x8x2_t?

请注意,该问题无法使用 union 可靠地解决 https://stackoverflow.com/a/29209307/2436175(从不活动的成员中读取会导致未定义的行为Edit:这只是 C++ 的情况,但事实证明C 允许类型双关 https://stackoverflow.com/a/11640603/2436175),也不由使用指针进行强制转换 https://stackoverflow.com/q/29253100/2436175(违反了严格的别名规则)。


It's 完全地在 C++ 中通过指针转换输入双关语是合法的,只要你这样做只是为了char*。这并非巧合,这就是memcpy被定义为致力于(技术上unsigned char*这已经足够好了)。

请注意以下段落:

对于任何对象(基类子对象除外) 可复制类型 T,无论该对象是否持有类型的有效值 T,构成对象的底层字节(1.7)可以复制到 char 或 unsigned char 数组。

42 如果将 char 或 unsigned char 数组的内容复制回来 进入该物体,该物体随后应保持其原始状态 价值。 [例子:

#define N sizeof(T)
char buf[N];
T obj;
// obj initialized to its original value
std::memcpy(buf, &obj, N);
// between these two calls to std::memcpy,
// obj might be modified 
std::memcpy(&obj, buf, N);
// at this point, each subobject of obj of scalar type
// holds its original value

—结束示例]

简单来说,像这样复制就是预期的功能std::memcpy。只要您正在处理的类型满足必要的琐碎性要求,它就是完全合法的。

严格别名确实not包括char* or unsigned char*- 您可以随意为任何类型添加别名。

请注意,特别是对于无符号整数,您在这里有一些非常明确的回旋余地。 C++ 标准要求它们满足 C 标准的要求。 C 标准规定了该格式。捕获表示或类似内容的唯一方法是,您的实现是否有任何填充位,但 ARM 没有任何 8 位字节、8 位和 16 位整数。因此,对于具有零填充位的实现上的无符号整数,任何字节都是有效的无符号整数。

对于除 unsigned char 之外的无符号整数类型,这些位 对象表示的类型应分为两组: 值位和填充位(不需要任何 后者)。如果有N个值位,则每个位应代表 1 和 2N−1 之间的 2 的不同幂,因此对象 该类型应能够表示从 0 开始的值 使用纯二进制表示为 2N−1;这应是 称为值表示。任何填充位的值是 未指定。

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

ARM Neon:如何从 uint8x16_t 转换为 uint8x8x2_t? 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐