违反访问规定,将其转为无效*并返回
尝试以下内容时,我会得到违规读取地点.我在做什么错? uint64_t hInt = 2901924954136; void* hPoint = reinterpret_cast(hInt); uint64_t hIntBack = *static_cast(hPoint); //get access violation here 解决方案 我猜您是要在hPoint中存储hInt的地址,而不是hInt的值. uint64_t hInt = 2901924954136; void* hPoint = reinterpret_cast(&hInt); // ^ addressof operator 其他解决方案 您要做的是以下内容: 将整数施放到空隙指针 - 很好,但是指针可能指向不可用的内存. 将空隙指针投入指向未签名的64位整数的指
0 2023-11-25
编程技术问答社区
Decimal.ToUInt64 "对于UInt64来说,值要么太大,要么太小。
我在做: - Decimal production = 0; Decimal expense = 5000; Decimal.ToUInt64(production - expense); ,但它带有以下错误消息的异常. "Value was either too large or too small for a UInt64" 有人可以给我解决方法. 谢谢! 编辑 无论如何,我都希望结果为正数. 解决方案 问题:-5000m是一个负数,它超出了UInt64的范围( unsigned type). 解决方案:如果要应对负数. 使用Int64而不是UInt64. 请注意,您只能施放而不是调用Decimal.To...: long x = (long) (production - expense); 替代方案:验证该数字在尝试转换之前是非负的,并处理它,但是您认为适当. 非常狡猾的替代方案:如果您真的只需要绝对值
14 2023-10-30
编程技术问答社区
如何将std::Chrono::time_point转换为uint64_t?
我试图通过查看数据的时间戳,以查看我的数据是否为120秒(或2分钟),因此我在C ++中使用chrono软件包时的代码下方: uint64_t now = duration_cast(steady_clock::now().time_since_epoch()).count(); // check for 2 minutes old data bool is_old = (120 * 1000 getTimestamp())); uint64_t value = now; while (now getTimestamp() + 80 * 1000 && now
8 2023-10-22
编程技术问答社区
Swift-UInt行为
使用我的64位Mac(MacBook Pro 2009),Xcode Playground中的此代码很奇怪: let var1 = UInt32.max // 4,294,967,295 let var2 = UInt64.max // -1 --> why? var var3: UInt = UInt.max // -1 --> why? var3 = -1 // generates an error. 设置var3 to -1应生成错误.但是在声明行中,它变得等于-1. 解决方案 显然这只是Swift Playground中的一个错误,根据@anton,打印变量显示正确的值.
8 2023-10-09
编程技术问答社区
了解使用未签名的位板生成滑动件移动的" O^(O-2R)"公式?
我想做的 我正在尝试执行一些位操作来创建国际象棋引擎.为了制作这款引擎,我需要能够产生零件的动作,例如Rooks. 有一个便捷的公式用于创建一个方便的公式让rok移至:bitboardOfOccupiedSquares ^ (bitboardOfOccupiedSquares - 2 * bitboardOfPieceToMove). 考虑以下国际象棋板位置: 我正在尝试生成H1上的Rook可以移动到的所有正方形.因此,这应该很容易,我只需抓住被占用的正方形(18410433801713942527)的位,然后在H1上抓住Rook的位板(2^63或9223372036854775808),然后将它们插入方程式: let bitboardOfOccupiedSquares: UInt64 = 18410433801713942527 let bitboardOfPieceToMove: UInt64 = 9223372036854775808 let bitboardOfSqu
8 2023-10-08
编程技术问答社区
Swift转换C'的uint64_t与它使用自己的UInt64类型不同。
我正在将(客观)C到Swift移植应用程序,但必须使用C.将框架的功能传递到UINT之类的功能.因此,为避免在整个Swift应用程序中持续不断的铸造操作,我决定将C标头文件传输到Swift,将所有类型都带到我需要的地方. 我能够转移几乎所有的一切并克服了很多障碍,但是这个障碍: C标头定义一个包含UINT64_T变量的结构.该结构用于将数据作为指针传输到回调函数.回调函数将无效的指针作为参数,我必须将其用UntabemutablePointer操作施加到结构的类型(或如果适用的(如果适用)的另一个结构).只要我使用由swift上自动转换的c标题的原始结构,所有的铸造和内存访问都可以正常工作. . 在Swift中手动复制结构并不"字节拟合". 让我向您展示此情况的简化示例: 在capiheader.h文件中,有 之类的东西 typedef struct{ uint32_t var01; uint64_t var02; uint8_t arr[
12 2023-10-07
编程技术问答社区
c++字符串(int)+字符串(int)
我有2个字符串,都只包含数字.这些数字大于uint64_t的最大数字. 我仍要添加这两个数字,然后将结果转换为字符串? 解决方案 好吧,您可以使用较大的数据类型(例如,与大整数打交道),也可以快速敲打自己的. 我建议,如果这是一个脱颖而出,那么您会像您在开学的头几年那样做长远的添加.您可以直接在两个字符串上操作,添加列,执行"随身携带",然后构建包含结果的另一个字符串.您可以无需二进制或从二进制转换而执行所有操作. 在这里.只是为了好玩,我为您敲了一个解决方案: string Add( const string& a, const string& b ) { // Reserve storage for the result. string result; result.reserve( 1 + std::max(a.size(), b.size()) ); // Column positions and carry fl
6 2023-10-02
编程技术问答社区
将uint64_t转换为std::string
如何将UINT64_T值传输到STD :: String? 我需要构造包含此值的std ::字符串 例如这样的事情: void genString(uint64_t val) { std::string str; //.....some code for str str+=(unsigned int)val;//???? } 谢谢 解决方案 使用boost::lexical_cast或std::ostringstream 例如: str += boost::lexical_cast(val); 或 std::ostringstream o; o
4 2023-10-02
编程技术问答社区
C ++将字符串转换为Uint64_t
我正在尝试从字符串转换为UINT64_T整数. stoi返回一个32位整数,因此在我的情况下它不起作用.还有其他解决方案吗? 解决方案 尝试以下方法: #include #include #include int main() { uint64_t value; std::istringstream iss("18446744073709551610"); iss >> value; std::cout #include
10 2023-10-02
编程技术问答社区
将uint64转换为int64而不丢失信息
以下代码的问题: var x uint64 = 18446744073709551615 var y int64 = int64(x) 是y是-1.没有信息丢失,是在这两种数字类型之间转换以使用编码器和解码器的唯一方法? buff bytes.Buffer Encoder(buff).encode(x) Decoder(buff).decode(y) 注意,在您的典型情况下,我没有尝试直接数字转换.我更关心维护随机数发生器的统计属性. 解决方案 看到-1将与运行为32bits的过程一致. 参见例如 go1.1 go1.1发行笔记(引入uint64) x := ^uint32(0) // x is 0xffffffff i := int(x) // i is -1 on 32-bit systems, 0xffffffff on 64-bit fmt.Println(i) 使用fmt.Printf("%b\n", y)可以帮助查看发生了什
66 2023-07-24
编程技术问答社区
UInt64和 "该操作在检查模式下的编译时溢出"-CS0220
这感觉就像一个愚蠢的问题,但我似乎看不到答案.我有一个UINT64,它应该具有最大值 UInt64.MaxValue 18446744073709551615 但是,当我尝试分配一个适中的数字时,我会出现"在检查模式下的编译时间溢出的操作溢出"的溢出错误.如果我将其包装在"未检查"块中,则它会编译,然后运行,好像此变量为零: UInt64 value1 = 1073741824 * 8; // Compile error CS0220 UInt64 value2 = 8589934592; // Actual value - no error 为什么会发生这种情况? 解决方案 因为: UInt64 value1 = 1073741824 * 8; 将算术作为符号的32位整数,然后将其转换为ulong.尝试: UInt64 value1 = 1073741824UL * 8; UL表示字面意思是无符号的长期.有关文字后缀的更多信息,请
12 2023-03-20
编程技术问答社区
将(u)int64_t转换为NSNumbers
从本质上讲,我的问题是,我正在使用uint64_t对象作为密钥创建一个NSMutabledictionary. 有什么比这样做更好的方法? uint64_t bob=7; NSNumber *bobsNumber; #if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64 bobsNumber=[NSNumber numberWithUnsignedLong:bob]; #else bobsNumber=[NSNumber numberWithUnsignedLongLong:bob]; #endif 只要您不将其包含在二进制文件/插座/nsdata对象/其他任何内容中,这将起作用.但是有什么更好的方法吗?我真的想确保对象是64位,无论我在哪个平台上运行. 我想我只能长时间长时间避免整个问题. 解决方案 long long在
104 2023-03-16
编程技术问答社区
std::atoll与VC++
我一直在使用cstdlib使用std::atoll将字符串转换为使用GCC的int64_t.该功能似乎在Windows工具链上没有可用(使用Visual Studio Express 2010).最好的选择是什么? 我也有兴趣将strings转换为uint64_t.整数定义取自cstdint. 解决方案 msvc具有_atoi64和类似功能,请参见对于无签名的64位类型,请参见 其他解决方案 使用Stringstreams() std::string numStr = "12344444423223"; std::istringstream iss(numStr); long long num; iss>>num; 使用Boost Lexical_cast(boost/lexical_cast.hpp) std::string numStr = "12344444423223"; long long num = boost:
22 2023-02-27
编程技术问答社区
为什么uint64_t不能正常显示pow(2, 64)-1?
我试图理解为什么uint64_t类型不能正确显示pow(2,64)-1. Cplusplus标准是199711L. 我在C ++ 98标准下检查了pow() 的功能 double pow (double base , double exponent); float pow (float base , float exponent); long double pow (long double base, long double exponent); double pow (double base , int exponent); long double pow (long double base, int exponent); 所以我写了以下片段 double max1 = (pow(2, 64) - 1); cout
96 2023-02-25
编程技术问答社区
在x86机器上移位超过32位的uint64_t整数是否属于未定义行为?
学习艰难的方法,我试图在x86机器上左右移动long long和uint64_t uint64_t 0.我含糊地记得在一个只有32位机动变速器运算符上仅在前32位上工作,但无法回忆源. 我想知道是否在X86机器上移动超过32位UINT64_T整数是不确定的行为? 解决方案 标准说(N1570中的6.5.7): 3整数促销均在每个操作数上执行.结果的类型是 晋升的左操作数.如果右操作数的值为负或大于或等于晋升的左操作数的宽度,则行为是未固定的. 4 E1 e2 ,减少了Modulo 比结果类型中代表的最大值多.如果E1有签名 类型和非负值,E1×2 e2 在结果类型中表示,那就是 结果值;否则,行为是未定的. 5 E1 >> E2的结果是E1右移动E2位位置.如果E1有未签名类型 或者如果E1具有签名类型和非负值,则结果的值是积分 E1/2 E2 商的一部分.如果E1具有签名类型和负值,则 最终的值是实现的. 移动uint64_t少于64位的距离完全由标准定
78 2023-02-24
编程技术问答社区
无符号_int64的sprintf
我有以下代码. Sprintf中第二%D的输出始终显示为零.我认为我指定了错误的指定符.任何人都可以帮助我以正确的值写字符串.这必须在POSIX标准中实现.感谢您的输入 void main() { unsigned _int64 dbFileSize = 99; unsigned _int64 fileSize = 100; char buf[128]; memset(buf, 0x00, 128); sprintf(buf, "\nOD DB File Size = %d bytes \t XML file size = %d bytes", fileSize, dbFileSize); printf("The string is %s ", buf); } 输出: The string is OD DB File Size = 100 bytes XML file size = 0 bytes 解
34 2023-02-23
编程技术问答社区
如何处理大于UInt64的数字(C#)?
在C#中,如何用大大超过UINT64最大值的数字进行计算(18,446,744,073,709,551,615)? 解决方案 使用BigInteger类;在J#库中有一个(绝对可以从C#访问),另一个在F#中(需要测试此),并且有自由实现的实现这样的在纯C#中. 其他解决方案 您可以使用.NET 4.0 beta吗?如果是这样,您可以使用 BigInteger ./p> 否则,如果您贴在28位以内,则可以使用decimal - 但请注意,显然这将执行十进制算术,因此您可能需要在各个地方进行综合以进行补偿. 其他解决方案 您想使用这些数字是什么?如果您要进行的数字非常大的计算,您是否仍然需要准确到最后一位数字? 如果没有,则应考虑使用浮点值.它们可能是巨大的,双重类型的最大值为1.79769313486231570E+308(如果您不使用科学符号,则意味着1.79769313486231570乘以10000000 ... 0000-308 ZEROS乘以. 应该
78 2023-02-07
编程技术问答社区
将uint8数组合并为uint64的错误
我正在尝试此代码,在该代码中,我首先将UINT64编号拆分为UINT8的数组,然后将上述数组合并回原始数字. 但是,当我尝试打印出数字out时,它似乎返回UINT64的最大值. uint8 buf[8]; uint64 test = 123456789012; uint64 out = 0; Uint64toUint8Arr(buf, test, 0); out = Uint8ArrtoUint64(buf, 0); std::cout > 0 ; buf[lowest_pos+1] = (var & 0x000000
22 2023-02-04
编程技术问答社区