C# 目标C相当于C中的字节#

C# 目标C相当于C中的字节#,c#,objective-c,string,char,byte,C#,Objective C,String,Char,Byte,在C中# 。如何在目标C中实现同样的目标 实际需求是,我想将以下用c#编写的代码段转换为目标c。我搞不懂的部分是字节转换 string p = "help"; byte myByte = (byte)p[1]; 静态Int64加密(字符串p) { Int64 c=31; 对于(int i=0;i

在C中#

。如何在目标C中实现同样的目标

实际需求是,我想将以下用c#编写的代码段转换为目标c。我搞不懂的部分是字节转换

string p = "help";
byte myByte = (byte)p[1];
静态Int64加密(字符串p)
{       
Int64 c=31;
对于(int i=0;i
与C的等分:

注:所有字符均为8位

static Int64 Encrypt(string p)
{       
    Int64 c = 31;
    for (int i = 0; i < p.Length; i++)            
        c = c * 47 + (byte)p[i] % 97;            

    return c;
}
int64\u t加密(NSString*p){
const char*cString=[p cStringUsingEncoding:NSASCIIStringEncoding];
无符号长长度=strlen(cString);
int64_t c=31;
for(int i=0;i
NSLog输出:

p:帮助
c:152006240


尽管出于类型的目的,我不同意这种用法,但我见过人们使用
char
作为字节。C#中的a由Unicode字符(UTF-16)组成,而不是字节。您想完成什么?@HABO查看更新的问题请提供示例值。@Zaph从C#string和NSString中获得了使用Unicode编码的代码示例(但不是完全相同的字节布局)。C版本只使用较低的字节,您的ObjC版本会事先更改编码。此版本仅适用于单字节文本输入。@9dan,我清楚地说明了这一点。OP还声明“无符号8位整数(0-255)”。但事情变得非常奇怪,UTF-16的假设有几个原因,包括代理项对和平面1字符,如表情符号。如果您查看我的“编辑4”历史记录,您将看到我关于unicode和ASCII的初始答案。@9dan请查看OP提供的答案。答案代码为示例生成正确的结果:“abacus”->334160560256。@Zaph如果我的评论令您不安,我深表歉意。我可能错选了词。我只是想补充一点关于多字节复杂度的脚注。@9dan相信我,我并不难过。你的评论是正确的,但不是针对这个问题。一般来说,人们对unicode了解甚少,而且这些实现通常不适合代理项对和平面1字符。
int64_t Encrypt(NSString *p) {
    const char *cString = [p cStringUsingEncoding: NSASCIIStringEncoding];

    unsigned long length = strlen(cString);
    int64_t c = 31;
    for (int i = 0; i < length; i++)
        c = c * 47 + cString[i] % 97;

    return c;
}

NSString *p = @"help";
NSLog(@"p: %@", p);

int64_t c = Encrypt(p);
NSLog(@"c: lld", c);