c只传递给函数的前8个字节

时间:2018-01-30 23:14:55

标签: c micropython

我正在使用micropython中的C模块...如果我将一个字节数组传递给一个函数,只有前8个字节组成它(根据sizeof)。我还必须发送长度,然后复制它以访问函数中的所有内容。

DatetimeIndex(['2000-01-01', '2000-02-01', '2000-03-01', '2000-04-01',
           ... '2001-11-01'],
          dtype='datetime64[ns]', freq='M')

我做错了什么/是否有更好的方法将字节数组的指针发送到函数?

2 个答案:

答案 0 :(得分:3)

你在解释这个问题方面做得很差。你是说router.get("/register", function(req, res){ res.render("user/register"); }); router.post("/register", function(req, res){ if(req.body.password1!=req.body.password2){ return res.render("user/register"); } var newUser = new User({ username: req.body.username, email: req.body.email, isAdmin: "false" //password: req.body.password1 }); User.register(newUser, req.body.password1, function(err, user){ if(err){ //console.log(err + "skljflkjslflksddjfklsjdfkljsdlkjflksdjfkjsdklfjjfs;lk"); return res.render("user/register"); } passport.authenticate("local")(req, res, function(){ res.redirect("/cues"); }); }); }); 返回8?

sizeof(bytes)是一个指针,bytes返回该指针的大小。并且指针可能是您系统上的8个字节。这与它所指向的地址的字节数无关。

在C中,当你得到一个指针时,除非你将该信息作为另一个参数提供或者在数据中有一个特殊的终止值,否则无法知道它指向了多少字节。

答案 1 :(得分:3)

sizeof(bytes)返回指向byte的指针需要存储在内存中的字节数。它不会返回bytes所指向的数组所包含的字节数。

为此,您需要将该大小传递给函数:

static void printSomeBytes(char *description, byte *bytes, size_t size)
{
    printf("\r\n%s: ", description);
    for (size_t i = 0; i < size; ++i )
    {
        printf("%02X", bytes[i]); 
    }

    puts("");

}

修改
我还在那里添加了puts(""),以便立即打印字节。注意 printf被缓冲,除非你冲洗它,否则它不会在屏幕上显示输出 (fflush(stdout);)手动或在'\n'末尾添加printf换行符。 puts(string)相当于printf("%s\n", string);,但没有byte Kifd[] = { 0x0B, 0x79, 0x52, 0x40, 0xCB, 0x70, 0x49, 0xB0, 0x1C, 0x19, 0xB3, 0x3E, 0x32, 0x80, 0x4F, 0x0B}; printSomeBytes("Kifd", Kifd, sizeof Kifd / sizeof *Kifd); 必须解析格式参数的开销 结束编辑

然后叫它:

sizeof array / sizeof *array

获取数组元素数量的正确方法是:

public partial class Startup
{
    private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
    private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
    private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"];
    private static string postLogoutRedirectUri = ConfigurationManager.AppSettings["ida:PostLogoutRedirectUri"];

    string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);

    public void ConfigureAuth(IAppBuilder app)
    {
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

        app.UseCookieAuthentication(new CookieAuthenticationOptions());

        app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = clientId,
                Authority = authority,
                PostLogoutRedirectUri = postLogoutRedirectUri,
                Notifications = new OpenIdConnectAuthenticationNotifications
                {
                    AuthenticationFailed = context =>
                    {
                        context.HandleResponse();
                        context.Response.Redirect("/Home/ErrorPage?message=" + context.Exception.Message);
                        return Task.FromResult(0);
                    }
                }
            });
    }
}

我鼓励您使用该公式,即使您知道类型是8位 长。它使代码更具可移植性。