在 Matlab 中将标量打印为 int32
printing scalar as int32 in Matlab
我正在尝试打印标量,因为它看起来像是 int32。也就是说,如果我有 2532063508
,如果我将它写入 4 个字节并读取为 int32,我将读取 -1762903788
。
在 Matlab 中使用 int32
函数不起作用,因为它的工作方式是,[-2^31,2^31-1]
范围外的值映射到最近的端点。
所以我尝试使用 typecast
:
typecast(uint32(2532063508), 'int32')
完美地工作,但如果我写,例如-1 在那里,uint32() returns 0 所以它失败了。
P.S。我希望它也适用于有符号整数作为输入,也就是说,对于 -1 它应该 return -1
有什么建议吗?
您可以在 int64
中进行计算,然后转换为 uint32
:
f = @(x)typecast(uint32(mod(int64(x),int64(2)^32)),'int32');
或者
function y = f(x)
y = typecast(uint32(mod(int64(x),int64(2)^32)),'int32');
end
所以f([-1, 2532063508])
returns[-1, -1762903788]
.
我正在尝试打印标量,因为它看起来像是 int32。也就是说,如果我有 2532063508
,如果我将它写入 4 个字节并读取为 int32,我将读取 -1762903788
。
在 Matlab 中使用 int32
函数不起作用,因为它的工作方式是,[-2^31,2^31-1]
范围外的值映射到最近的端点。
所以我尝试使用 typecast
:
typecast(uint32(2532063508), 'int32')
完美地工作,但如果我写,例如-1 在那里,uint32() returns 0 所以它失败了。
P.S。我希望它也适用于有符号整数作为输入,也就是说,对于 -1 它应该 return -1
有什么建议吗?
您可以在 int64
中进行计算,然后转换为 uint32
:
f = @(x)typecast(uint32(mod(int64(x),int64(2)^32)),'int32');
或者
function y = f(x)
y = typecast(uint32(mod(int64(x),int64(2)^32)),'int32');
end
所以f([-1, 2532063508])
returns[-1, -1762903788]
.