C++ c+中的4个字符到int+;
我必须从文件中读取10个字节,最后4个字节是无符号整数。但是我得到了一个11个字符字节长的字符数组/指针。如何将最后4个字节(末尾没有零终止字符)转换为无符号整数C++ c+中的4个字符到int+;,c++,int,arrays,C++,Int,Arrays,我必须从文件中读取10个字节,最后4个字节是无符号整数。但是我得到了一个11个字符字节长的字符数组/指针。如何将最后4个字节(末尾没有零终止字符)转换为无符号整数 //pesudo code char *p = readBytesFromFile(); unsigned int myInt = 0; for( int i = 6; i < 10; i++ ) myInt += (int)p[i]; //pesudo代码 char*p=readBytesFromFile(); 无符
//pesudo code
char *p = readBytesFromFile();
unsigned int myInt = 0;
for( int i = 6; i < 10; i++ )
myInt += (int)p[i];
//pesudo代码
char*p=readBytesFromFile();
无符号整数myInt=0;
对于(int i=6;i<10;i++)
myInt+=(int)p[i];
对吗?对我来说似乎不正确 TrymyInt=*(重新解释(p+6))代码>
这将获取第6个字符的地址,将其重新解释为指向无符号int的指针,然后返回它所指向的(无符号int)值。TrymyInt=*(reinterpret_cast(p+6))代码>
这将获取第6个字符的地址,将其重新解释为指向无符号int的指针,然后返回它所指向的(无符号int)值。我同意前面的答案,但只想补充一点,如果使用不同的endianness创建文件,此解决方案可能无法100%工作
我不想用额外的信息来迷惑你们,但请记住,当你们直接从一个文件中强制转换时,endianness可能会给你们带来问题
这里有一个关于endianness的教程:我同意前面的答案,但只想补充一点,如果文件是用不同的endianness创建的,这个解决方案可能无法100%工作
我不想用额外的信息来迷惑你们,但请记住,当你们直接从一个文件中强制转换时,endianness可能会给你们带来问题
这里有一个关于endianness的教程:以下代码可能有效:
这是对齐安全的(应该在每个系统上)。仍然要注意第1点和第3点。以下代码可能有效:
这是对齐安全的(应该在每个系统上)。仍然要注意第1点和第3点。也许可以选择使用工会?我认为这可能有效;
更新:是的,它可以工作
union intc32{
charc[4];
INTV;
};
int charsToInt(字符a、字符b、字符c、字符d){
intc32 r={{a,b,c,d};
返回r.v;
}
也许可以选择使用工会?我认为这可能有效;
更新:是的,它可以工作
union intc32{
charc[4];
INTV;
};
int charsToInt(字符a、字符b、字符c、字符d){
intc32 r={{a,b,c,d};
返回r.v;
}
使用memcpy
<代码>*(int*)(p+6)
(1)可能会遇到对齐问题,(2)违反严格的别名。Endianness也可能是一个问题。您需要将不同字节的位移到适当的位置。取决于传输值的结束度。循环中的赋值可以是myInt=myInt-Guys,这些都应该被做成答案,而不是注释。使用memcpy
<代码>*(int*)(p+6)
(1)可能会遇到对齐问题,(2)违反严格的别名。Endianness也可能是一个问题。您需要将不同字节的位移到适当的位置。取决于传输值的结束度。循环中的赋值可能是myInt=myInt-Guys,这些都应该被做成答案,而不是注释。这对于endianness来说可能是危险的,因为没有unsigned int
变量可以查看。我们正在研究任意内存,它需要一个指针<由于这个原因,代码>重新解释\u cast只能在指针上工作。这对于Endianness可能是危险的,因为没有可查看的无符号int
变量。我们正在研究任意内存,它需要一个指针<由于这个原因,代码>重新解释\u cast
只能在指针上工作。严格的别名。无法通过类型为unsigned int的glvalue访问一组字符的存储值。另一个不这样做的原因是严格别名。您不能通过类型为unsigned int的glvalue访问一组字符的存储值。不这样做的另一个原因。
myInt = *(reinterpret_cast<unsigned int*>(p + 6));
myInt = myInt << 8 | static_cast<unsigned char>(p[i])