我有代码
#include <emmintrin.h>
#include <stdio.h>
void print128_num(__m128i var)
{
uint16_t *val = (uint16_t*) &var;
printf("Numerical: %i %i %i %i %i %i %i %i \n",
val[0], val[1], val[2], val[3], val[4], val[5],
val[6], val[7]);
}
int main(void)
{
__m128i a = _mm_set_epi32(4, 3, 2, 1);
__m128i b = _mm_set_epi32(7, 6, 5, 4);
__m128i c = _mm_add_epi32(a, b);
print128_num(c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,其中uint16_t没有声明.我正在使用GCC和MINGW.
这是完整的错误.
||In function 'print128_num':|
|6|error: 'uint16_t' undeclared (first use in this function)|
|6|error: (Each undeclared identifier is reported …Run Code Online (Sandbox Code Playgroud) 我需要使用printf()来打印uint16_t.这个SO答案(如何打印uint32_t和uint16_t变量值?)说我需要使用inttypes.h.
但是,我正在使用嵌入式系统,并且inttypes.h不可用.当uint16_t的格式说明符不可用时,如何打印uint16_t?
我真的被卡住了!我不是ObjC的专家,现在我正在尝试使用Swift.我认为这会简单得多,但事实并非如此.我记得Craig说他们称Swift为"Objective-C without C",但OS X的基础中有太多的C类型.文件说许多ObjC类型会自动转换为Swift类型,可能是双向转换.我很好奇:C类型怎么样?
这是我被困的地方:
//array1:[String?], event.KeyCode.value:Int16
let s = array1[event.keyCode.value]; //return Int16 is not convertible to Int
Run Code Online (Sandbox Code Playgroud)
我在ObjC尝试了一些东西:
let index = (Int) event.keyCode.value; //Error
Run Code Online (Sandbox Code Playgroud)
要么
let index = (Int32) event.keyCode.value; //Error again, Swift seems doesn't support this syntax
Run Code Online (Sandbox Code Playgroud)
将Int16转换为Int的正确方法是什么?
我想uint16用Python 将一组二进制数据解包到数据中.
Internet充满了使用示例,struct.unpack但只涉及处理大小为4的二进制数组的示例.
大多数这些示例如下(B是文件中的二进制数组)
U = struct.unpack("HH",B[0:4]);
Run Code Online (Sandbox Code Playgroud)
所以我试图解压缩大小为6的数组:
U = struct.unpack("HHH",B[0:6]);
Run Code Online (Sandbox Code Playgroud)
有用.
但如果我想解压缩一个大小的数组L(L是一对)该怎么办?我试过了:
U = struct.unpack("H"*(L/2),B[0:L]);
Run Code Online (Sandbox Code Playgroud)
但它不起作用,提示器给我一个错误(L=512例如):
struct.error: unpack requires a string argument of length 512
Run Code Online (Sandbox Code Playgroud)
这条消息很奇怪,因为如果我想解压缩二进制数组uint16,我需要一个"HHH...HHH"这个数组的一半大小的字符串...
如果有人能给我一些帮助,我将非常感激.
我进步了一点......事实上,我尝试过:
U = struct.unpack("H"*8,B[0:8]);
Run Code Online (Sandbox Code Playgroud)
有用.
U = struct.unpack("H"*10,B[0:10]);
Run Code Online (Sandbox Code Playgroud)
有用.
U = struct.unpack("H"*222,B[0:444]);
Run Code Online (Sandbox Code Playgroud)
它仍然有效
U = struct.unpack("H"*223,B[0:446]);
Run Code Online (Sandbox Code Playgroud)
它不起作用!它永远不会适用于大于446的尺寸
希望它能帮助任何人回答我.
@MarkRansom我检查了len(B),实际上,长度是444.我很确定B是一个大小为512的数组,因为B来自: B = f.read(512)其中F是一个8000字节大小的文件.所以read()有问题...感谢您的回答!但如果有人帮助解压缩大小为L的二进制数组,我将不胜感激
我正在尝试初始化内联一个UInt16数组.对于int,我可以执行以下操作:
int[] int_array = new[]{0,0,0,0};
Run Code Online (Sandbox Code Playgroud)
同时使用UInt16在没有强制转换的情况下无效:
UInt16[] uint16_array= new[]{(UInt16)0,(UInt16)0};
Run Code Online (Sandbox Code Playgroud)
那些演员阵容很烦人.我想知道C#中是否有任何后缀来消除赋值的歧义(如浮点数为0.0f).
我正在以这种方式读取二进制模式的文件:
fread(&pcap_header ,sizeof(pcap_hdr_t ), 1 , pFile);
fread(&pcaprec_header ,sizeof(pcaprec_hdr_t ), 1 , pFile);
fread(ðer_header ,sizeof(ethernet_hdr_t ), 1 , pFile);
fread(&ip_header ,sizeof(ip_hdr_t ), 1 , pFile);
fread(&tcp_header ,sizeof(tcp_header_t ), 1 , pFile);
fread(&modbus_header ,sizeof(modbus_header_t ), 1 , pFile);
Run Code Online (Sandbox Code Playgroud)
而上面的所有变量都被定义为旁边的'sizeof()'函数中的类型.我正在尝试提取文件的特定部分并将其打印出来.这部分的大小是16位,它的定义如下:
uint16_t ip_len;
Run Code Online (Sandbox Code Playgroud)
在'ip_hdr_t'类型中.我查看了WireShark并看到了这16位的实际值,它是0x0034.
我尝试了两件事:
printf("size of ip header: %hu\n", ip_header.ip_len); 打印13312(好像位的值是0x3400)uint8_t ip_len;
uint8_t ip_len2;
并单独打印:
printf("size of ip header: %hu\n", ip_header.ip_len);
printf("size of ip header: %hu\n", ip_header.ip_len2);这次我收到了输出:ip header的大小:0(0x00)ip header的大小:52(0x34),这是正确的答案.
我的问题是:第一次印刷出了什么问题?
谢谢
要提取无符号32位整数的高位字和低位字,并将每个字存储在单独的uint16_t变量中,我执行如下操作(nbr是无符号的32位整数):
uint16_t lower_word = (uint16_t) nbr & 0x0000FFFF; // mask desired word
uint16_t upper_word = (uint16_t) ((nbr & 0xFFFF0000) >> 16); // right-shift after masking
Run Code Online (Sandbox Code Playgroud)
显式转换为uint16_t是不必要的吗?还有什么其他更有效的方法,如果有的话,你建议获得所需的结果而不是这种方法吗?
我创建了uint8_t和uint16_t变量类型,并从一些寄存器中读取值.但是,我不确定我是否可以轻松地将它们转换为浮点数,如果转换具有数字意义.
将uint8_t和uint16_t转换为float的最佳方法是什么?
我有一个基本问题.说我有一个Uint16Array,我有4号.
data_16=new Uint16Array([4]);
Run Code Online (Sandbox Code Playgroud)
现在我的长度为1,byteLength为2;
我如何将其转换为Uint8Array.
我不想创建新视图.
data_8 = new Uint8Array(data_16)
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我得到数组长度1和byteLength 1.这不是我想要的.
我需要将16array中的16位值扩展为8位值,以便8位数组,因此最终会得到8位数组的8位数组.
我可以创建一个函数,用shif和所有东西进行转换.但它可以仅使用数组操作吗?
我有一个库驱动的结果存储为int16_t值(它是一个负数,我可以使用绝对值)和另一个库函数,需要这个值几步之后,形式为uin8_t*.如何在不使用String的情况下完成此操作?
以下代码有效,但使用了可怕的字符串.有没有办法在不调用String或std :: string的情况下执行此操作?
void setup() {
Serial.begin(9600);
}
void loop() {
delay(5000);
String initialVal= String(-fetchInt());
Serial.print("Initial value is: ");Serial.println(initialVal);//prints "76"
uint8_t medianVal[sizeof(initialVal);
medianVal.getBytes(medianVal, sizeof(initialVal));
Serial.print("median value is: ");Serial.println(medianVal);//prints "76"
uint8_t* finalVal = medianVal;
Serial.print("final value is: ");Serial.println((char*)finalVal);//prints "76"
}
int16_t fetchInt(){
return -76;
}
Run Code Online (Sandbox Code Playgroud)
那么,如何将int16_t转换为uint8_t*?
在下面的评论中已经指出它
Serial.println(static_cast<unsigned>(*finalVal));可行,但是这个解决方案将uint8_t转换为unsigned int,并且该方法需要uint8_t*.
我来自Java之类,似乎很难将整数转换为字符串.